{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:47.945441Z",
     "iopub.status.busy": "2022-07-31T02:43:47.945188Z",
     "iopub.status.idle": "2022-07-31T02:43:48.038213Z",
     "shell.execute_reply": "2022-07-31T02:43:48.037510Z"
    },
    "init_cell": true,
    "origin_pos": 4,
    "slideshow": {
     "slide_type": "notes"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "from IPython import display\n",
    "import numpy as np\n",
    "import torch\n",
    "import torchvision\n",
    "from torch.utils import data\n",
    "from torchvision import transforms\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\"\n",
    "\n",
    "batch_size = 256\n",
    "# train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "<div class=\"jumbotron\">\n",
    "    <p class=\"display-1 h1\">softmax回归的从零开始实现</p>\n",
    "    <hr class=\"my-4\">\n",
    "    <p>主讲：李岩</p>\n",
    "    <p>管理学院</p>\n",
    "    <p>liyan@cumtb.edu.cn</p>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# softmax回归基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{example}\\label{example:imageClass}\n",
    "图像分类问题：假设每次输入是一个$2\\times2$的灰度图像。\n",
    "\\begin{itemize}\n",
    "    \\item 可以用一个标量表示每个像素值，每个图像对应四个特征$x_1, x_2, x_3, x_4$。\n",
    "    \\item 假设每个图像属于类别“猫”、“鸡”和“狗”中的一个\n",
    "\\end{itemize}\n",
    "\\end{example}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{problem}\\label{prob:multioutputLabel}\n",
    "如何表示类别标签？\n",
    "\\end{problem}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{definition}\\label{def:onehot}\n",
    "**独热编码**（one-hot encoding）：是一个向量，它的分量和类别一样多；\n",
    "**类别对应的分量设置为1**，其他所有分量设置为0。\n",
    "\\end{definition}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "在Example \\ref{example:imageClass}中，标签$y$将是一个三维向量：\n",
    "- $(1, 0, 0)$对应于“猫”\n",
    "- $(0, 1, 0)$对应于“鸡”\n",
    "- $(0, 0, 1)$对应于“狗”\n",
    "\n",
    "$$y \\in \\left\\{(1, 0, 0), (0, 1, 0), (0, 0, 1)\\right\\}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 网络架构"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 需要一个有多个输出的模型，每个类别对应一个输出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<center><img src=\"../img/3_linear_network/softmaxreg.svg\" width=80%></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "\\begin{aligned}\n",
    "o_1 &= x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1,\\\\\n",
    "o_2 &= x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2,\\\\\n",
    "o_3 &= x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3.\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "用矩阵形式表达\n",
    "\n",
    "$$\n",
    "\\boldsymbol{o} = \\mathbf{W} \\boldsymbol{x} + \\boldsymbol{b}\n",
    "\\label{eq:multioutputLinear}\n",
    "$$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- softmax回归也是一个**单层神经网络**\n",
    "- softmax回归的输出层也是**全连接层**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## softmax运算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 希望模型的输出$\\hat{y}_j$可以视为属于类$j$的概率，然后选择具有最大输出值的类别$\\operatorname*{argmax}_j y_j$作为预测结果\n",
    "    - 例，如果$\\hat{y}_1$、$\\hat{y}_2$和$\\hat{y}_3$分别为0.1、0.8和0.1，则预测的类别是2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{problem}\\label{prob:linearProb}\n",
    "式\\eqref{eq:multioutputLinear}的结果作为概率是否可以？\n",
    "\\end{problem}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{definition}\\label{def:calibration}\n",
    "**校准**（calibration）：一个训练的目标函数，来激励模型精准地估计概率\n",
    "\\end{definition}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- **softmax**函数能够将未规范化的预测变换为**非负数并且总和为1**，同时让模型保持**可导**的性质"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "\\hat{\\boldsymbol{y}} = \\mathrm{softmax}(\\boldsymbol{o})\\quad\\quad \\text{其中}\\quad \\hat{y}_j = \\frac{\\exp(o_j)}{\\sum_k \\exp(o_k)}\n",
    "\\label{eq:softmaxEquation}\n",
    "$$\n",
    "\n",
    "对于所有的$j$总有$0 \\leq \\hat{y}_j \\leq 1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "社会科学家邓肯·卢斯于1959年的离散选择模型（choice model）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- softmax运算不会改变未规范化的预测$\\boldsymbol{o}$之间的大小次序，只会确定分配给每个类别的概率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "\\operatorname*{argmax}_j \\hat y_j = \\operatorname*{argmax}_j o_j\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 损失函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 假设整个数据集$\\{\\mathbf{X}, \\mathbf{Y}\\}$具有$n$个样本，\n",
    "    - 其中索引$i$的样本由特征向量$\\boldsymbol{x}^{(i)}$和独热标签向量$\\boldsymbol{y}^{(i)}$组成"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- softmax函数给出的向量$\\hat{\\boldsymbol{y}}$可以视为“对给定任意输入$\\boldsymbol{x}$的每个类的条件概率”"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "P(\\mathbf{Y} \\mid \\mathbf{X}) = \\prod_{i=1}^n P(\\boldsymbol{y}^{(i)} \\mid \\boldsymbol{x}^{(i)}).\n",
    "$$\n",
    "\n",
    "其中，$\\mathbf{Y}\\in\\mathbb{R}^{n\\times q}$，$\\mathbf{X}\\in\\mathbb{R}^{n\\times d}$，表示数据集有$n$个样本，有$d$个特征，$q$个类别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "根据最大似然估计，**最大化**$P(\\mathbf{Y} \\mid \\mathbf{X})$，相当于**最小化负对数似然**\n",
    "\n",
    "$$\n",
    "-\\log P(\\mathbf{Y} \\mid \\mathbf{X}) = \\sum_{i=1}^n -\\log P(\\boldsymbol{y}^{(i)} \\mid \\boldsymbol{x}^{(i)})\n",
    "= \\sum_{i=1}^n l(\\boldsymbol{y}^{(i)}, \\hat{\\boldsymbol{y}}^{(i)}),\n",
    "$$\n",
    "\n",
    "其中，$\\hat{\\boldsymbol{y}}^{(i)}$是预测的属于第$i$个类别的概率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "对于任何标签$\\boldsymbol{y}$和模型预测$\\hat{\\boldsymbol{y}}$，损失函数为\n",
    "\n",
    "$$ l(\\boldsymbol{y}, \\hat{\\boldsymbol{y}}) = - \\sum_{j=1}^q y_j \\log \\hat{y}_j\n",
    "\\label{eq:crossEntropyLoss}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{definition}\\label{def:crossEntropyLoss}\n",
    "**交叉熵损失**（cross-entropy loss）：式\\eqref{eq:crossEntropyLoss}定义的损失函数\n",
    "\\end{definition}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 交叉熵表示对于真实的概率分布$P$，用概率分布$Q$近似的时候带来的预期惊异程度\n",
    "- 符号表示为$H(P,Q)$：从$P$到$Q$的交叉熵"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "H(P,Q)=-\\sum_{x}P(x)\\log Q(x)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 当$P=Q$时，交叉熵最小"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- Kullback-Leibler divergence (KL散度)：衡量分布的距离\n",
    "\n",
    "$$\n",
    "KL(P\\Vert Q) = \\sum_x P(x)log\\frac{P(x)}{Q(x)}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "KL散度和交叉熵的关系\n",
    "$$\n",
    "KL(P\\Vert Q)=H(P,Q)- H(P)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Softmax导数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 根据softmax的定义可以得到：\n",
    "\n",
    "$$\n",
    "\\begin{aligned}\n",
    "l(\\mathbf{y}, \\hat{\\mathbf{y}}) &=  - \\sum_{j=1}^q y_j \\log \\frac{\\exp(o_j)}{\\sum_{k=1}^q \\exp(o_k)} \\\\\n",
    "&= \\sum_{j=1}^q y_j \\log \\sum_{k=1}^q \\exp(o_k) - \\sum_{j=1}^q y_j o_j\\\\\n",
    "&= \\log \\sum_{k=1}^q \\exp(o_k) - \\sum_{j=1}^q y_j o_j.\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 对预测$o_j$的导数为\n",
    "\n",
    "$$\n",
    "\\begin{split}\n",
    "\\frac{\\partial l(\\mathbf{y}, \\hat{\\mathbf{y}})}{\\partial o_j} &= \\frac{\\exp(o_j)}{\\sum_{k=1}^q \\exp(o_k)} - y_j = \\mathrm{softmax}(\\mathbf{o})_j - y_j\\\\\n",
    "&= \\hat{y}_j-y_j.\n",
    "\\end{split}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- softmax的导数为softmax分配的概率与实际发生的情况（由独热标签向量表示）之间的差异"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 获取训练集和检验集数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 使用类似MNIST（Mixed National Institute of Standards and Technology）数据集但更复杂的Fashion-MNIST数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<center><img src=\"../img/3_linear_network/mnist.png\" width=80%></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- Fashion-MNIST由10个类别的图像组成\n",
    "    - 每个类别由训练数据集（train dataset）中的6000张图像和测试数据集（test dataset）中的1000张图像组成"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- Fashion-MNIST中包含的10个类别，分别为t-shirt（T恤）、trouser（裤子）、pullover（套衫）、dress（连衣裙）、coat（外套）、sandal（凉鞋）、shirt（衬衫）、sneaker（运动鞋）、bag（包）和ankle boot（短靴）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<center><img src=\"../img/3_linear_network/FashionMnist.png\" width=80%></center> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 每个输入图像的高度和宽度均为28像素。 数据集由灰度图像组成，其通道数为1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 读取Fashion-MNIST数据集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    " ```python\n",
    "import torch\n",
    "import torchvision\n",
    "from torch.utils import data\n",
    "from torchvision import transforms\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "trans = transforms.ToTensor() # 将图像数据从PIL类型变换成32位浮点数格式；不然的话，数据类型是PIL.Image.Image\n",
    "mnist_train = torchvision.datasets.FashionMNIST(\n",
    "    root=\"../data\", train=True, transform=trans, download=False)    # 创建训练集\n",
    "mnist_test = torchvision.datasets.FashionMNIST(\n",
    "    root=\"../data\", train=False, transform=trans, download=False)   # 创建检验集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- ```python\n",
    "torchvision.datasets.FashionMNIST(root: str, train: bool = True, transform: Optional[Callable] = None, download: bool = False)\n",
    "```\n",
    "    - `root`：存储数据的根目录，`str`类型\n",
    "    - `train`：是否创建训练集，`bool`类型\n",
    "    - `transform`：将PIL图像转变为的函数\n",
    "    - `download`：是否从网络上下载数据，`bool`类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- PIL (Python Image Library)：`Python`的第三方图像处理库\n",
    "    - 处理栅格图像（*raster image*）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 栅格图，也被称为位图（bitmap）、点阵图、像素图，是一个存储像素值的二维数组"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "<center><img src=\"../img/3_linear_network/raster.jpg\" width=80%></center>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- 像素（pixel, picture element的缩写），构成栅格图的基本元素"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 图像的深度（depth）：一个像素包含的信息量（多少个bit）\n",
    "    - 1bit，黑白图像\n",
    "    - 8bit，灰度图像，取值范围0$\\sim 2^8-1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 图像的分辨率（resolution）：一个图像包含的像素数量，通常表示为**长包含的像素数量$\\times$宽包含的像素数量**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 图像的通道（channel）：图像所包含的一种主要颜色的灰度图像。在该通道上的像素值表示这种颜色的强度\n",
    "    - 例如用RGB表示的颜色，表明该图像有三通道，分别对应Red、Green、Blue三种颜色"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'训练集的长度 60000, 检验集的长度 10000'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "'每个图像的形状 torch.Size([1, 28, 28])'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f'训练集的长度 {len(mnist_train)}, 检验集的长度 {len(mnist_test)}'\n",
    "f'每个图像的形状 {mnist_train[0][0].shape}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(tensor([[[0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.1725, 0.4980, 0.7137, 0.7255, 0.6314,\n",
       "           0.4706, 0.2157, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.1647, 0.7765, 0.9843, 1.0000, 0.9843, 0.9765, 0.9686,\n",
       "           1.0000, 0.9882, 0.8392, 0.3922, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000,\n",
       "           0.0000, 0.9137, 0.9882, 0.9294, 0.9373, 0.9176, 0.9294, 0.9216,\n",
       "           0.9294, 0.9294, 0.9961, 0.8902, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0039, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000,\n",
       "           0.0627, 0.8235, 0.8824, 0.8431, 0.6863, 0.8510, 0.8471, 0.7569,\n",
       "           0.7686, 0.8863, 0.8667, 0.8196, 0.1961, 0.0000, 0.0000, 0.0078,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0078, 0.0000, 0.0000, 0.7804,\n",
       "           0.8980, 0.9098, 0.9020, 0.9608, 0.8000, 0.8588, 0.9922, 0.9608,\n",
       "           0.8118, 0.7608, 0.8745, 0.9059, 0.9255, 0.9216, 0.0000, 0.0000,\n",
       "           0.0118, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0039, 0.0000, 0.5373, 0.9216,\n",
       "           0.8000, 0.8196, 0.7882, 0.8196, 0.9176, 0.7451, 0.9176, 0.8549,\n",
       "           0.8431, 0.9333, 0.9373, 0.8000, 0.7412, 0.8784, 0.6039, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7608, 0.7882,\n",
       "           0.7843, 0.8196, 0.7922, 0.7569, 0.8039, 0.7608, 0.7176, 0.8549,\n",
       "           0.9059, 0.7725, 0.6745, 0.7098, 0.7569, 0.8039, 0.7804, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0118, 0.8314, 0.7961,\n",
       "           0.7373, 0.7412, 0.7686, 0.7765, 0.7765, 0.7882, 0.7686, 0.8510,\n",
       "           0.7020, 0.6549, 0.7176, 0.8510, 0.7725, 0.7922, 0.8588, 0.1176,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1333, 0.8824, 0.7843,\n",
       "           0.7608, 0.7451, 0.7373, 0.7529, 0.7686, 0.7529, 0.6667, 0.7922,\n",
       "           0.7451, 0.7882, 0.7647, 0.7843, 0.7882, 0.8196, 0.8902, 0.1961,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.2667, 0.8824, 0.8235,\n",
       "           0.8275, 0.7765, 0.7529, 0.7686, 0.8000, 0.7686, 0.7098, 0.8314,\n",
       "           0.7725, 0.7647, 0.7529, 0.8078, 0.8627, 0.8235, 0.8980, 0.3647,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.4353, 0.8745, 0.8902,\n",
       "           0.9922, 0.8196, 0.7686, 0.8000, 0.8275, 0.8078, 0.7176, 0.8471,\n",
       "           0.8078, 0.8235, 0.7961, 0.8431, 0.9569, 0.8784, 0.8902, 0.5882,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.5451, 0.8824, 0.8784,\n",
       "           1.0000, 0.7922, 0.8078, 0.8314, 0.8196, 0.8275, 0.7451, 0.8353,\n",
       "           0.7922, 0.8118, 0.8078, 0.8706, 1.0000, 0.9020, 0.8627, 0.7451,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.7059, 0.8863, 0.8784,\n",
       "           1.0000, 0.7804, 0.8000, 0.8118, 0.8392, 0.8392, 0.7451, 0.8471,\n",
       "           0.8078, 0.7961, 0.8039, 0.8588, 0.9529, 0.8784, 0.8392, 0.9176,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.8824, 0.8745, 0.8941,\n",
       "           0.9961, 0.8196, 0.8078, 0.8157, 0.8353, 0.8235, 0.7490, 0.8431,\n",
       "           0.8118, 0.8000, 0.8157, 0.8275, 0.9765, 0.8863, 0.8392, 1.0000,\n",
       "           0.1490, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.9804, 0.9098, 0.9412,\n",
       "           0.9373, 0.8275, 0.7961, 0.8196, 0.8039, 0.8275, 0.7725, 0.8431,\n",
       "           0.8157, 0.8157, 0.8392, 0.8353, 0.9373, 0.9059, 0.8588, 1.0000,\n",
       "           0.3176, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.9725, 0.9255, 0.9686,\n",
       "           0.9412, 0.7961, 0.7843, 0.8157, 0.8078, 0.8392, 0.7569, 0.8353,\n",
       "           0.8314, 0.8157, 0.8314, 0.8275, 0.9529, 0.9490, 0.8824, 0.9961,\n",
       "           0.2588, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.9686, 0.9020, 0.9882,\n",
       "           0.8863, 0.7804, 0.8275, 0.7922, 0.8275, 0.8353, 0.7137, 0.8353,\n",
       "           0.8314, 0.8078, 0.7922, 0.8588, 0.8118, 0.9686, 0.8706, 0.9294,\n",
       "           0.4078, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0392, 0.9569, 0.8588, 0.9804,\n",
       "           0.8039, 0.7804, 0.8196, 0.7922, 0.8196, 0.8275, 0.7412, 0.8392,\n",
       "           0.8078, 0.8235, 0.7843, 0.8314, 0.6039, 0.9412, 0.8157, 0.8588,\n",
       "           0.5490, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.0824, 1.0000, 0.8706, 0.9333,\n",
       "           0.7216, 0.8235, 0.7529, 0.8078, 0.8196, 0.8235, 0.7412, 0.8353,\n",
       "           0.8275, 0.8196, 0.7529, 0.8941, 0.6078, 0.8863, 0.9333, 0.9451,\n",
       "           0.6510, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.1451, 0.9608, 0.8863, 0.9451,\n",
       "           0.5882, 0.7725, 0.7412, 0.8000, 0.8196, 0.8235, 0.7176, 0.8353,\n",
       "           0.8353, 0.7882, 0.7216, 0.8431, 0.5725, 0.8471, 0.9255, 0.8824,\n",
       "           0.6039, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.2275, 0.9373, 0.8902, 1.0000,\n",
       "           0.6196, 0.7569, 0.7647, 0.8000, 0.8196, 0.8353, 0.7059, 0.8118,\n",
       "           0.8510, 0.7804, 0.7608, 0.8275, 0.6196, 0.8588, 0.9255, 0.8471,\n",
       "           0.5922, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.2667, 0.9137, 0.8863, 0.9529,\n",
       "           0.5451, 0.7843, 0.7569, 0.8039, 0.8235, 0.8157, 0.7059, 0.8039,\n",
       "           0.8314, 0.7961, 0.7686, 0.8471, 0.6157, 0.7020, 1.0000, 0.8471,\n",
       "           0.6078, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.3176, 0.8824, 0.8784, 0.8275,\n",
       "           0.5412, 0.8588, 0.7255, 0.7882, 0.8353, 0.8118, 0.7725, 0.8863,\n",
       "           0.8314, 0.7843, 0.7451, 0.8431, 0.7176, 0.3529, 1.0000, 0.8275,\n",
       "           0.5765, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.3569, 0.8235, 0.9020, 0.6196,\n",
       "           0.4471, 0.8039, 0.7333, 0.8157, 0.8196, 0.8078, 0.7569, 0.8235,\n",
       "           0.8275, 0.8000, 0.7647, 0.8000, 0.7098, 0.0902, 1.0000, 0.8353,\n",
       "           0.6196, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.3412, 0.8039, 0.9098, 0.4275,\n",
       "           0.6431, 1.0000, 0.8392, 0.8784, 0.8706, 0.8235, 0.7725, 0.8392,\n",
       "           0.8824, 0.8706, 0.8275, 0.8627, 0.8510, 0.0000, 0.9176, 0.8471,\n",
       "           0.6627, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.3608, 0.8353, 0.9098, 0.5725,\n",
       "           0.0196, 0.5255, 0.5922, 0.6353, 0.6667, 0.7176, 0.7137, 0.6431,\n",
       "           0.6510, 0.6980, 0.6353, 0.6118, 0.3843, 0.0000, 0.9412, 0.8824,\n",
       "           0.8235, 0.0000, 0.0000, 0.0000],\n",
       "          [0.0000, 0.0000, 0.0000, 0.0000, 0.1686, 0.6431, 0.8078, 0.5529,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000,\n",
       "           0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.4980, 0.4902,\n",
       "           0.2980, 0.0000, 0.0000, 0.0000]]]),\n",
       " 4)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mnist_train[5000]  # 是一个tuple，包含2个元素，分别是图像的数据信息和图像的类别标签，标签为0～9的数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def get_fashion_mnist_labels(labels):  \n",
    "    ''' labels是一个标签向量（一系列类型为int的标签），把tensor([9, 0, 0, 3, 0, 2, 7, 2, 5, 5, 0, 9, 5, 5, 7, 9, 1, 0])转换为['t-shirt', 'trouser', 'pullover', 'dress', 'coat',\n",
    "                   'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']'''\n",
    "    \"\"\"返回Fashion-MNIST数据集的文本标签\"\"\"\n",
    "    text_labels = ['t-shirt', 'trouser', 'pullover', 'dress', 'coat',\n",
    "                   'sandal', 'shirt', 'sneaker', 'bag', 'ankle boot']\n",
    "    return [text_labels[int(i)] for i in labels] "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- 可视化数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def show_images(imgs, num_rows, num_cols, titles=None, scale=1.5):  \n",
    "    \"\"\"绘制图像列表\"\"\"\n",
    "    figsize = (num_cols * scale, num_rows * scale)\n",
    "    _, axes = plt.subplots(num_rows, num_cols, figsize=figsize) # return figs, axes\n",
    "    axes = axes.flatten()   # 将(num_rows, num_cols)子图平展成(1, num_rows*num_cols)\n",
    "    for i, (ax, img) in enumerate(zip(axes, imgs)):\n",
    "        if torch.is_tensor(img):\n",
    "            ax.imshow(img.numpy(), cmap='gray')   # 图片张量\n",
    "        else:\n",
    "            ax.imshow(img, cmap='gray')           # PIL图片\n",
    "        ax.axes.get_xaxis().set_visible(False)   # 隐藏横坐标\n",
    "        ax.axes.get_yaxis().set_visible(False)   # 隐藏纵坐标\n",
    "        if titles:\n",
    "            ax.set_title(titles[i])  # 给图添加标题\n",
    "    return axes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- ```python\n",
    "Axes.imshow(X)\n",
    "```\n",
    "    - `X`：图像数据，可以是`array`，形状为(M,N)，也可以是PIL图像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "X, y = next(iter(data.DataLoader(mnist_train, batch_size=18)))  # 读取图像数据，批量为18"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'X的形状为 torch.Size([18, 1, 28, 28])，y的形状为 torch.Size([18])'"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f'X的形状为 {X.shape}，y的形状为 {y.shape}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 972x216 with 18 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "_ = show_images(X.reshape(18, 28, 28), 2, 9, titles=get_fashion_mnist_labels(y))\n",
    "# 显示图片\n",
    "# X.reshape(18,28,28)，改变原来X的形状，符合show_images函数要求"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 小批量读取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 利用`torch`内置的`DataLoader`函数批量读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 256  # 批量大小\n",
    "\n",
    "def get_dataloader_workers():  \n",
    "    \"\"\"使用2个进程来读取数据\"\"\"\n",
    "    return 2\n",
    "\n",
    "train_iter = data.DataLoader(mnist_train, batch_size, shuffle=True,  # mnist_train类型：torchvision.datasets.mnist.FashionMNIST\n",
    "                             num_workers=get_dataloader_workers())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 完整的读取Fashion-MNIST数据集的函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 定义`load_data_fashion_mnist`函数，用于获取和读取Fashion-MNIST数据集：\n",
    "    - 返回训练集和验证集的数据迭代器\n",
    "    - 有一个可选参数resize，可以调整图像大小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def load_data_fashion_mnist(batch_size, resize=None):  \n",
    "    \"\"\"下载Fashion-MNIST数据集，然后将其加载到内存中\"\"\"\n",
    "    trans = [transforms.ToTensor()]   # 将图像从PIL类型转换成张量\n",
    "    if resize:\n",
    "        trans.insert(0, transforms.Resize(resize)) # resize是把小图片放大,在0之前插入\n",
    "    trans = transforms.Compose(trans)   # 组合多个transform\n",
    "    mnist_train = torchvision.datasets.FashionMNIST(\n",
    "        root=\"../data\", train=True, transform=trans, download=False)\n",
    "    mnist_test = torchvision.datasets.FashionMNIST(\n",
    "        root=\"../data\", train=False, transform=trans, download=False)\n",
    "    return (data.DataLoader(mnist_train, batch_size, shuffle=True,\n",
    "                            num_workers=get_dataloader_workers()),\n",
    "            data.DataLoader(mnist_test, batch_size, shuffle=False,\n",
    "                            num_workers=get_dataloader_workers()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- ```python\n",
    "torchvision.transforms.Resize(size)\n",
    "```\n",
    "    - 缩放给定的图像\n",
    "    - `size`：序列或者`int`\n",
    "        - 若为序列，指定缩放后的长和宽\n",
    "        - 若为`int`，图像的短边会改变到该数值，长边会被按比例缩放。例如，height>width,图像会被调整为($\\text{size}\\times\\frac{\\text{height}}{\\text{width}}$,size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- ```python\n",
    "torchvision.transforms.Compose(transforms)\n",
    "```\n",
    "    - 组合多个transforms\n",
    "    - `transforms`：`Transform`对象的列表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "train_iter, test_iter = load_data_fashion_mnist(32, resize=64)\n",
    "# 读取数据，批量为32，缩放到64像素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X的形状 torch.Size([32, 1, 64, 64]), X的数据类型 torch.float32\n",
      " y的形状 torch.Size([32]), y的数据类型 torch.int64\n"
     ]
    }
   ],
   "source": [
    "for X, y in train_iter:\n",
    "    print(f'X的形状 {X.shape}, X的数据类型 {X.dtype}\\n y的形状 {y.shape}, y的数据类型 {y.dtype}')\n",
    "    break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 实现softmax函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 用Fashion-MNIST数据集实现softmax分类算法\n",
    "- 批量设置为256"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 256  # 批量大小\n",
    "train_iter, test_iter = load_data_fashion_mnist(batch_size)   #读取批量数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 初始化模型参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 每个样本都将用固定长度的向量表示\n",
    "    - 原始数据集中的每个样本都是$28 \\times 28$的图像，在此**将展平每个图像，把它们看作长度为784的向量**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 数据集有10个类别，所以网络输出维度为10\n",
    "- 权重将构成一个$784 \\times 10$的矩阵\n",
    "- 偏置将构成一个$1 \\times 10$的行向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "num_inputs = 784 # 1*28*28 = 784\n",
    "num_outputs = 10\n",
    "\n",
    "# 初始化模型参数\n",
    "W = torch.normal(0, 0.01, size=(num_inputs, num_outputs), requires_grad=True)  # 初始化权重，服从正态分布N(0,0.01)\n",
    "b = torch.zeros(num_outputs, requires_grad=True)   # 初始化偏置为0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 定义softmax操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 对每个项指数运算（使用`exp`）；\n",
    "- 对每一行求和（小批量中每个样本是一行），得到每个样本的规范化常数；\n",
    "- 将每一行除以其规范化常数，确保结果的和为1。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "$$\n",
    "\\mathrm{softmax}(\\mathbf{X})_{ij} = \\frac{\\exp(\\mathbf{X}_{ij})}{\\sum_k \\exp(\\mathbf{X}_{ik})}.\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.060001Z",
     "iopub.status.busy": "2022-07-31T02:43:48.059778Z",
     "iopub.status.idle": "2022-07-31T02:43:48.063891Z",
     "shell.execute_reply": "2022-07-31T02:43:48.063262Z"
    },
    "origin_pos": 14,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def softmax(X): # X的行数是样本数，因此每行有10个X_k,转成10个和为1的概率数\n",
    "    X_exp = torch.exp(X)\n",
    "    partition = X_exp.sum(dim=1, keepdim=True)\n",
    "    return X_exp / partition"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- ```python\n",
    "torch.sum(input,dim,keepdim=False)\n",
    "```\n",
    "    - 给定一个矩阵`input`，可以对所有元素求和\n",
    "    - 也可以只求同一个轴上的元素之和，即同一列（轴0）或同一行（轴1），用参数`dim`设定\n",
    "    - 若按轴求和，求和之后这个轴的元素个数为１，所以对应的维度会被去掉，如果要保留这个维度，则应当`keepdim=True`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.048976Z",
     "iopub.status.busy": "2022-07-31T02:43:48.048601Z",
     "iopub.status.idle": "2022-07-31T02:43:48.056970Z",
     "shell.execute_reply": "2022-07-31T02:43:48.056335Z"
    },
    "origin_pos": 10,
    "scrolled": true,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[1., 2., 3.],\n",
       "        [4., 5., 6.]])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[5., 7., 9.]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "tensor([[ 6.],\n",
       "        [15.]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.sum(0, keepdim=True) # 按轴求和之后保留维度，keepdim=True\n",
    "X.sum(1, keepdim=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([5., 7., 9.])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "tensor([ 6., 15.])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X.sum(0)   # 按轴求和后未保留维度\n",
    "X.sum(1)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "检验一下定义的softmax函数是否运行正确"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.066702Z",
     "iopub.status.busy": "2022-07-31T02:43:48.066485Z",
     "iopub.status.idle": "2022-07-31T02:43:48.072898Z",
     "shell.execute_reply": "2022-07-31T02:43:48.072285Z"
    },
    "origin_pos": 16,
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[-0.1618,  0.5928, -0.5218,  0.3581, -2.4456],\n",
       "        [ 0.9880,  1.5069,  1.1009, -1.7541, -0.2676]])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X1 = torch.normal(0, 1, (2, 5))  # 生成一个2行5列的服从正态分布N(0,1)的矩阵\n",
    "X1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X1每个元素对应的概率为\n",
      "tensor([[0.1783, 0.3792, 0.1244, 0.2999, 0.0182],\n",
      "        [0.2410, 0.4049, 0.2698, 0.0155, 0.0687]])\n",
      " X1每行求和tensor([1., 1.])\n"
     ]
    }
   ],
   "source": [
    "X1_prob = softmax(X1)\n",
    "print(f'X1每个元素对应的概率为\\n{X1_prob}\\n X1每行求和{X1_prob.sum(1)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 建立softmax回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.075677Z",
     "iopub.status.busy": "2022-07-31T02:43:48.075461Z",
     "iopub.status.idle": "2022-07-31T02:43:48.079250Z",
     "shell.execute_reply": "2022-07-31T02:43:48.078602Z"
    },
    "origin_pos": 19,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def net(X):\n",
    "    return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 注意：`W`的形状是$784\\times10$，因此用`reshape`将每张原始图像数据（$28\\times28$）展平成一个长度为784向量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 定义损失函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 实现交叉熵损失函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.091932Z",
     "iopub.status.busy": "2022-07-31T02:43:48.091398Z",
     "iopub.status.idle": "2022-07-31T02:43:48.097732Z",
     "shell.execute_reply": "2022-07-31T02:43:48.097055Z"
    },
    "origin_pos": 24,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def cross_entropy(y_hat, y):\n",
    "    \"\"\"\n",
    "        y_hat：预测值\n",
    "        y：真值\n",
    "    \"\"\"\n",
    "    return - torch.log(y_hat[range(len(y_hat)), y])  # torch.log是以自然数e为底的对数函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- 创建一个数据样本`y_hat`，其中包含2个样本在3个类别的预测概率，以及它们对应的标签`y`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.082190Z",
     "iopub.status.busy": "2022-07-31T02:43:48.081700Z",
     "iopub.status.idle": "2022-07-31T02:43:48.087699Z",
     "shell.execute_reply": "2022-07-31T02:43:48.087051Z"
    },
    "origin_pos": 21,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "y_hat为\n",
      "tensor([[0.1000, 0.3000, 0.6000],\n",
      "        [0.3000, 0.2000, 0.5000]])\n",
      "y为 tensor([0, 2])\n"
     ]
    }
   ],
   "source": [
    "y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])\n",
    "y = torch.tensor([0, 2]) # 在第一个样本中，第1类是正确的预测； 而在第二个样本中，第3类是正确的预测\n",
    "print(f'y_hat为\\n{y_hat}')\n",
    "print(f'y为 {y}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 使用y作为y_hat中概率的索引， 选择第一个样本中第1类的概率和第二个样本中第3类的概率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([0.1000, 0.5000])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_hat[[0, 1], y] #【0，1】是样本序列，y是每个样本对应的真实分类标号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([2.3026, 0.6931])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算y_hat和y的交叉熵\n",
    "cross_entropy(y_hat, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 评估准确率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 分类须输出硬预测（hard prediction）时， 通常选择预测概率最高的类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 将预测类别与真实`y`元素进行比较，当预测与标签分类y一致时，即是正确的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "\\begin{definition}\\label{def:accuracy}\n",
    "分类精度：正确预测数量与总预测数量之比\n",
    "\\end{definition}\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### 实现计算分类精度的函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- y_hat是矩阵，假定第二个维度存储每个类的预测分数\n",
    "- 使用argmax获得每行中最大元素的索引来获得预测类别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.109842Z",
     "iopub.status.busy": "2022-07-31T02:43:48.109628Z",
     "iopub.status.idle": "2022-07-31T02:43:48.114858Z",
     "shell.execute_reply": "2022-07-31T02:43:48.114250Z"
    },
    "origin_pos": 29,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def accuracy(y_hat, y):  \n",
    "    \"\"\"计算预测正确的数量\"\"\"\n",
    "    if len(y_hat.shape) > 1 and y_hat.shape[1] > 1:  #判断y_hat是一个矩阵\n",
    "        y_hat = y_hat.argmax(axis=1)  # torch.argmax\n",
    "    cmp = y_hat.type(y.dtype) == y    # 因为运算符==对数据类型敏感，将y_hat转换成与y相同的数据类型，便于比较\n",
    "    return float(cmp.type(y.dtype).sum()) # cmp是bool向量，转换为与y相同的数据类型，可以求和"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "- ```python\n",
    "torch.argmax(input, dim)\n",
    "```\n",
    "    - 返回指定维度上最大值的序号\n",
    "    - `input`输入张量\n",
    "    - `dim`指定的维度（轴）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- ```python\n",
    "torch.Tensor.type(dtype=None)\n",
    "```\n",
    "    - `dtype`：需要的数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "预测值为\n",
      "tensor([[0.1000, 0.3000, 0.6000],\n",
      "        [0.3000, 0.2000, 0.5000]])\n",
      "真值为tensor([0, 2])\n"
     ]
    }
   ],
   "source": [
    "print(f'预测值为\\n{y_hat}')\n",
    "print(f'真值为{y}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 第一个样本的预测类别是2，与真值**不符**\n",
    "- 第二个样本的预测类别是2，与真值**相符**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'分类的精度为0.5'"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在假想的预测值y_hat和真值y上的分类精度为\n",
    "f'分类的精度为{accuracy(y_hat, y) / len(y)}'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### 实现计算数据迭代器可访问数据集的分类精度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 需要累计在每个批量上**预测正确的数量**与**预测的总数量**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 定义`Accumulator`类\n",
    "    - 创建2个变量，分别用于存储正确预测的数量和预测的总数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.136354Z",
     "iopub.status.busy": "2022-07-31T02:43:48.135880Z",
     "iopub.status.idle": "2022-07-31T02:43:48.667940Z",
     "shell.execute_reply": "2022-07-31T02:43:48.666945Z"
    },
    "origin_pos": 36,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "class Accumulator:  \n",
    "    \"\"\"在n个变量上累加\"\"\"\n",
    "    def __init__(self, n):\n",
    "        self.data = [0.0] * n  # 生成初始值为0的含n个元素的列表\n",
    "\n",
    "    def add(self, *args):\n",
    "        # 对n个变量分别累加\n",
    "        self.data = [a + float(b) for a, b in zip(self.data, args)]\n",
    "\n",
    "    def reset(self):\n",
    "        self.data = [0.0] * len(self.data)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        return self.data[idx]   # 类中定义__getitem__函数，可以获取指定序号的数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- 构建可以评估任意模型`net`分类精度的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.118510Z",
     "iopub.status.busy": "2022-07-31T02:43:48.118292Z",
     "iopub.status.idle": "2022-07-31T02:43:48.123338Z",
     "shell.execute_reply": "2022-07-31T02:43:48.122692Z"
    },
    "origin_pos": 32,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def evaluate_accuracy(net, data_iter):  \n",
    "    \"\"\"计算在指定数据集上模型的精度\"\"\"\n",
    "    if isinstance(net, torch.nn.Module):\n",
    "        net.eval() # 将模型设置为评估模式\n",
    "    metric = Accumulator(2) # 需要累计2个变量：正确预测数 和 预测总数\n",
    "    with torch.no_grad():   # 不需要计算梯度\n",
    "        for X, y in data_iter:\n",
    "            metric.add(accuracy(net(X), y), y.numel())\n",
    "    return metric[0] / metric[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0592"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 在给定的初始权重和偏置，构建的softmax回归模型的初始分类精度为\n",
    "evaluate_accuracy(net, test_iter)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 建立优化器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 小批量随机梯度下降优化模型的损失函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def sgd(params, lr, batch_size):  # params: [w,b]\n",
    "    \"\"\"小批量随机梯度下降\n",
    "    lr：学习速率\n",
    "    \"\"\"\n",
    "    with torch.no_grad(): # 在该上下文管理器下，所有计算得出的tensor的requires_grad都自动设置为False。\n",
    "        for param in params:\n",
    "            param -= lr * param.grad / batch_size  # 更新参数，学习速率lr控制更新大小，批量大小batch_size规范化步长\n",
    "            param.grad.zero_() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "lr = 0.1  # 学习速率\n",
    "\n",
    "def updater(batch_size):\n",
    "    return sgd([W, b], lr, batch_size)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Softmax回归的训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## 定义一个函数来训练一个迭代周期"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.672101Z",
     "iopub.status.busy": "2022-07-31T02:43:48.671534Z",
     "iopub.status.idle": "2022-07-31T02:43:48.681391Z",
     "shell.execute_reply": "2022-07-31T02:43:48.680765Z"
    },
    "origin_pos": 39,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def train_epoch_ch3(net, train_iter, loss, updater):  \n",
    "    \"\"\"训练模型一个迭代周期（定义见第3章）\n",
    "    net: 模型网络\n",
    "    train_iter: 训练数据迭代器\n",
    "    loss：损失函数\n",
    "    updater：优化器\n",
    "    \"\"\"\n",
    "    if isinstance(net, torch.nn.Module):\n",
    "        # 将模型设置为训练模式\n",
    "        net.train()\n",
    "    metric = Accumulator(3) #累计3个变量：# 训练损失总和、训练准确度总和、样本数\n",
    "    for X, y in train_iter:\n",
    "        y_hat = net(X)  # 计算梯度并更新参数，得到预测值\n",
    "        l = loss(y_hat, y)  # 计算损失\n",
    "        if isinstance(updater, torch.optim.Optimizer):\n",
    "            # 使用PyTorch内置的优化器和损失函数\n",
    "            updater.zero_grad()\n",
    "            l.mean().backward()  # 反向计算梯度，注意pytorch内置优化器用mean函数将损失向量变为标量\n",
    "            updater.step()       # 更新参数\n",
    "        else:\n",
    "            # 使用自己定制的优化器和损失函数\n",
    "            l.sum().backward()\n",
    "            updater(X.shape[0])\n",
    "        metric.add(float(l.sum()), accuracy(y_hat, y), y.numel())\n",
    "    # 返回训练损失和分类精度\n",
    "    return metric[0] / metric[2], metric[1] / metric[2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 定义一个动画绘制训练过程的类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.684252Z",
     "iopub.status.busy": "2022-07-31T02:43:48.684046Z",
     "iopub.status.idle": "2022-07-31T02:43:48.693873Z",
     "shell.execute_reply": "2022-07-31T02:43:48.693295Z"
    },
    "origin_pos": 42,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "class Animator:  \n",
    "    \"\"\"在动画中绘制训练过程\"\"\"\n",
    "    def __init__(self, xlabel=None, ylabel=None, legend=None, xlim=None,\n",
    "                 ylim=None, xscale='linear', yscale='linear',\n",
    "                 fmts=('-', 'm--', 'g-.', 'r:'), nrows=1, ncols=1,\n",
    "                 figsize=(10.5, 7.5)):\n",
    "        if legend is None:\n",
    "            legend = []\n",
    "        use_svg_display()  # 用矢量图显式\n",
    "        self.fig, self.axes = plt.subplots(nrows, ncols, figsize=figsize)\n",
    "        if nrows * ncols == 1:\n",
    "            self.axes = [self.axes, ]\n",
    "        # 使用lambda函数捕获参数，设置轴的属性\n",
    "        self.config_axes = lambda: set_axes(\n",
    "            self.axes[0], xlabel, ylabel, xlim, ylim, xscale, yscale, legend)\n",
    "        self.X, self.Y, self.fmts = None, None, fmts\n",
    "\n",
    "    def add(self, x, y):\n",
    "        # 向图表中添加多个数据点\n",
    "        if not hasattr(y, \"__len__\"):\n",
    "            y = [y]  # 变成列表，以便下方取y的长度\n",
    "        n = len(y)\n",
    "        if not hasattr(x, \"__len__\"):\n",
    "            x = [x] * n\n",
    "        if not self.X:\n",
    "            self.X = [[] for _ in range(n)]\n",
    "        if not self.Y:\n",
    "            self.Y = [[] for _ in range(n)]\n",
    "        for i, (a, b) in enumerate(zip(x, y)):\n",
    "            # 相同的x与每个y匹配（每个y代表一类数据，例如训练损失、训练分类精度、检验分类精度）\n",
    "            if a is not None and b is not None:\n",
    "                self.X[i].append(a)\n",
    "                self.Y[i].append(b)\n",
    "        self.axes[0].cla()  # 清除轴\n",
    "        for x, y, fmt in zip(self.X, self.Y, self.fmts):\n",
    "            self.axes[0].plot(x, y, fmt)\n",
    "        self.config_axes()\n",
    "        display.display(self.fig)\n",
    "        display.clear_output(wait=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "from IPython import display\n",
    "\n",
    "def use_svg_display():\n",
    "    # 显式矢量图在Jupyter中显式绘图\n",
    "    display.set_matplotlib_formats('svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):\n",
    "    \"\"\"设置matplotlib的轴\"\"\"\n",
    "    axes.set_xlabel(xlabel)  # 设置x标签\n",
    "    axes.set_ylabel(ylabel)\n",
    "    axes.set_xscale(xscale)  # 设置x轴的比例\n",
    "    axes.set_yscale(yscale)\n",
    "    axes.set_xlim(xlim)      # 设置x轴的范围\n",
    "    axes.set_ylim(ylim)\n",
    "    if legend:\n",
    "        axes.legend(legend)  # 增添图例\n",
    "    axes.grid()              # 打开网格"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 训练函数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "- 会在`train_iter`访问到的训练数据集上训练一个模型`net`\n",
    "- 训练函数会运行多个迭代周期（由`num_epochs`指定）\n",
    "- 利用`Animator`类来可视化训练进度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.696646Z",
     "iopub.status.busy": "2022-07-31T02:43:48.696446Z",
     "iopub.status.idle": "2022-07-31T02:43:48.701731Z",
     "shell.execute_reply": "2022-07-31T02:43:48.701136Z"
    },
    "origin_pos": 44,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater):  \n",
    "    \"\"\"训练模型（定义见第3章）\"\"\"\n",
    "    writer = SummaryWriter()\n",
    "    animator = Animator(xlabel='epoch', xlim=[1, num_epochs], ylim=[0.3, 0.9],\n",
    "                        legend=['train loss', 'train acc', 'test acc'])\n",
    "    for epoch in range(num_epochs):\n",
    "        train_metrics = train_epoch_ch3(net, train_iter, loss, updater)\n",
    "        # 评估在检验集上的分类精度\n",
    "        test_acc = evaluate_accuracy(net, test_iter)\n",
    "        # 横轴是迭代周期、纵轴包括三个值：训练损失、训练分类精度、检验分类精度\n",
    "        # train_metrics是一个tuple，+(test_acc,)构成三个值的tuple\n",
    "        animator.add(epoch + 1, train_metrics + (test_acc,))\n",
    "        # 增加需要tensorboard记录的指标，add_scalars（），参数：名字、键：值、epoch，同一个名字可以显示在同一张图中\n",
    "        writer.add_scalars('loss', {'train':train_metrics[0]}, epoch)\n",
    "        writer.add_scalars('accuracy', {'train':train_metrics[1], 'test':test_acc}, epoch)\n",
    "    train_loss, train_acc = train_metrics\n",
    "    assert train_loss < 0.5, train_loss\n",
    "    assert train_acc <= 1 and train_acc > 0.7, train_acc\n",
    "    assert test_acc <= 1 and test_acc > 0.7, test_acc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "- 训练模型10个迭代周期"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:43:48.710770Z",
     "iopub.status.busy": "2022-07-31T02:43:48.710251Z",
     "iopub.status.idle": "2022-07-31T02:44:21.176998Z",
     "shell.execute_reply": "2022-07-31T02:44:21.176306Z"
    },
    "origin_pos": 49,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
       "<svg height=\"456.255469pt\" version=\"1.1\" viewBox=\"0 0 629.565625 456.255469\" width=\"629.565625pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2025-11-30T19:41:00.926071</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 456.255469 \n",
       "L 629.565625 456.255469 \n",
       "L 629.565625 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 30.103125 418.699219 \n",
       "L 616.003125 418.699219 \n",
       "L 616.003125 10.999219 \n",
       "L 30.103125 10.999219 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_1\">\n",
       "    <g id=\"xtick_1\">\n",
       "     <g id=\"line2d_1\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 418.699219 \n",
       "L 30.103125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_2\">\n",
       "      <defs>\n",
       "       <path d=\"M 0 0 \n",
       "L 0 3.5 \n",
       "\" id=\"md30d7d8941\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_1\">\n",
       "      <!-- 1 -->\n",
       "      <g transform=\"translate(26.921875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 12.40625 8.296875 \n",
       "L 28.515625 8.296875 \n",
       "L 28.515625 63.921875 \n",
       "L 10.984375 60.40625 \n",
       "L 10.984375 69.390625 \n",
       "L 28.421875 72.90625 \n",
       "L 38.28125 72.90625 \n",
       "L 38.28125 8.296875 \n",
       "L 54.390625 8.296875 \n",
       "L 54.390625 0 \n",
       "L 12.40625 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-49\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_2\">\n",
       "     <g id=\"line2d_3\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 95.203125 418.699219 \n",
       "L 95.203125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_4\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"95.203125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_2\">\n",
       "      <!-- 2 -->\n",
       "      <g transform=\"translate(92.021875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 19.1875 8.296875 \n",
       "L 53.609375 8.296875 \n",
       "L 53.609375 0 \n",
       "L 7.328125 0 \n",
       "L 7.328125 8.296875 \n",
       "Q 12.9375 14.109375 22.625 23.890625 \n",
       "Q 32.328125 33.6875 34.8125 36.53125 \n",
       "Q 39.546875 41.84375 41.421875 45.53125 \n",
       "Q 43.3125 49.21875 43.3125 52.78125 \n",
       "Q 43.3125 58.59375 39.234375 62.25 \n",
       "Q 35.15625 65.921875 28.609375 65.921875 \n",
       "Q 23.96875 65.921875 18.8125 64.3125 \n",
       "Q 13.671875 62.703125 7.8125 59.421875 \n",
       "L 7.8125 69.390625 \n",
       "Q 13.765625 71.78125 18.9375 73 \n",
       "Q 24.125 74.21875 28.421875 74.21875 \n",
       "Q 39.75 74.21875 46.484375 68.546875 \n",
       "Q 53.21875 62.890625 53.21875 53.421875 \n",
       "Q 53.21875 48.921875 51.53125 44.890625 \n",
       "Q 49.859375 40.875 45.40625 35.40625 \n",
       "Q 44.1875 33.984375 37.640625 27.21875 \n",
       "Q 31.109375 20.453125 19.1875 8.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-50\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_3\">\n",
       "     <g id=\"line2d_5\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 160.303125 418.699219 \n",
       "L 160.303125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_6\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"160.303125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_3\">\n",
       "      <!-- 3 -->\n",
       "      <g transform=\"translate(157.121875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 40.578125 39.3125 \n",
       "Q 47.65625 37.796875 51.625 33 \n",
       "Q 55.609375 28.21875 55.609375 21.1875 \n",
       "Q 55.609375 10.40625 48.1875 4.484375 \n",
       "Q 40.765625 -1.421875 27.09375 -1.421875 \n",
       "Q 22.515625 -1.421875 17.65625 -0.515625 \n",
       "Q 12.796875 0.390625 7.625 2.203125 \n",
       "L 7.625 11.71875 \n",
       "Q 11.71875 9.328125 16.59375 8.109375 \n",
       "Q 21.484375 6.890625 26.8125 6.890625 \n",
       "Q 36.078125 6.890625 40.9375 10.546875 \n",
       "Q 45.796875 14.203125 45.796875 21.1875 \n",
       "Q 45.796875 27.640625 41.28125 31.265625 \n",
       "Q 36.765625 34.90625 28.71875 34.90625 \n",
       "L 20.21875 34.90625 \n",
       "L 20.21875 43.015625 \n",
       "L 29.109375 43.015625 \n",
       "Q 36.375 43.015625 40.234375 45.921875 \n",
       "Q 44.09375 48.828125 44.09375 54.296875 \n",
       "Q 44.09375 59.90625 40.109375 62.90625 \n",
       "Q 36.140625 65.921875 28.71875 65.921875 \n",
       "Q 24.65625 65.921875 20.015625 65.03125 \n",
       "Q 15.375 64.15625 9.8125 62.3125 \n",
       "L 9.8125 71.09375 \n",
       "Q 15.4375 72.65625 20.34375 73.4375 \n",
       "Q 25.25 74.21875 29.59375 74.21875 \n",
       "Q 40.828125 74.21875 47.359375 69.109375 \n",
       "Q 53.90625 64.015625 53.90625 55.328125 \n",
       "Q 53.90625 49.265625 50.4375 45.09375 \n",
       "Q 46.96875 40.921875 40.578125 39.3125 \n",
       "z\n",
       "\" id=\"DejaVuSans-51\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_4\">\n",
       "     <g id=\"line2d_7\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 225.403125 418.699219 \n",
       "L 225.403125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_8\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"225.403125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_4\">\n",
       "      <!-- 4 -->\n",
       "      <g transform=\"translate(222.221875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 37.796875 64.3125 \n",
       "L 12.890625 25.390625 \n",
       "L 37.796875 25.390625 \n",
       "z\n",
       "M 35.203125 72.90625 \n",
       "L 47.609375 72.90625 \n",
       "L 47.609375 25.390625 \n",
       "L 58.015625 25.390625 \n",
       "L 58.015625 17.1875 \n",
       "L 47.609375 17.1875 \n",
       "L 47.609375 0 \n",
       "L 37.796875 0 \n",
       "L 37.796875 17.1875 \n",
       "L 4.890625 17.1875 \n",
       "L 4.890625 26.703125 \n",
       "z\n",
       "\" id=\"DejaVuSans-52\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-52\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_5\">\n",
       "     <g id=\"line2d_9\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 290.503125 418.699219 \n",
       "L 290.503125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_10\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"290.503125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_5\">\n",
       "      <!-- 5 -->\n",
       "      <g transform=\"translate(287.321875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 10.796875 72.90625 \n",
       "L 49.515625 72.90625 \n",
       "L 49.515625 64.59375 \n",
       "L 19.828125 64.59375 \n",
       "L 19.828125 46.734375 \n",
       "Q 21.96875 47.46875 24.109375 47.828125 \n",
       "Q 26.265625 48.1875 28.421875 48.1875 \n",
       "Q 40.625 48.1875 47.75 41.5 \n",
       "Q 54.890625 34.8125 54.890625 23.390625 \n",
       "Q 54.890625 11.625 47.5625 5.09375 \n",
       "Q 40.234375 -1.421875 26.90625 -1.421875 \n",
       "Q 22.3125 -1.421875 17.546875 -0.640625 \n",
       "Q 12.796875 0.140625 7.71875 1.703125 \n",
       "L 7.71875 11.625 \n",
       "Q 12.109375 9.234375 16.796875 8.0625 \n",
       "Q 21.484375 6.890625 26.703125 6.890625 \n",
       "Q 35.15625 6.890625 40.078125 11.328125 \n",
       "Q 45.015625 15.765625 45.015625 23.390625 \n",
       "Q 45.015625 31 40.078125 35.4375 \n",
       "Q 35.15625 39.890625 26.703125 39.890625 \n",
       "Q 22.75 39.890625 18.8125 39.015625 \n",
       "Q 14.890625 38.140625 10.796875 36.28125 \n",
       "z\n",
       "\" id=\"DejaVuSans-53\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-53\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_6\">\n",
       "     <g id=\"line2d_11\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 355.603125 418.699219 \n",
       "L 355.603125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_12\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"355.603125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_6\">\n",
       "      <!-- 6 -->\n",
       "      <g transform=\"translate(352.421875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 33.015625 40.375 \n",
       "Q 26.375 40.375 22.484375 35.828125 \n",
       "Q 18.609375 31.296875 18.609375 23.390625 \n",
       "Q 18.609375 15.53125 22.484375 10.953125 \n",
       "Q 26.375 6.390625 33.015625 6.390625 \n",
       "Q 39.65625 6.390625 43.53125 10.953125 \n",
       "Q 47.40625 15.53125 47.40625 23.390625 \n",
       "Q 47.40625 31.296875 43.53125 35.828125 \n",
       "Q 39.65625 40.375 33.015625 40.375 \n",
       "z\n",
       "M 52.59375 71.296875 \n",
       "L 52.59375 62.3125 \n",
       "Q 48.875 64.0625 45.09375 64.984375 \n",
       "Q 41.3125 65.921875 37.59375 65.921875 \n",
       "Q 27.828125 65.921875 22.671875 59.328125 \n",
       "Q 17.53125 52.734375 16.796875 39.40625 \n",
       "Q 19.671875 43.65625 24.015625 45.921875 \n",
       "Q 28.375 48.1875 33.59375 48.1875 \n",
       "Q 44.578125 48.1875 50.953125 41.515625 \n",
       "Q 57.328125 34.859375 57.328125 23.390625 \n",
       "Q 57.328125 12.15625 50.6875 5.359375 \n",
       "Q 44.046875 -1.421875 33.015625 -1.421875 \n",
       "Q 20.359375 -1.421875 13.671875 8.265625 \n",
       "Q 6.984375 17.96875 6.984375 36.375 \n",
       "Q 6.984375 53.65625 15.1875 63.9375 \n",
       "Q 23.390625 74.21875 37.203125 74.21875 \n",
       "Q 40.921875 74.21875 44.703125 73.484375 \n",
       "Q 48.484375 72.75 52.59375 71.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-54\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-54\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_7\">\n",
       "     <g id=\"line2d_13\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 420.703125 418.699219 \n",
       "L 420.703125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_14\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"420.703125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_7\">\n",
       "      <!-- 7 -->\n",
       "      <g transform=\"translate(417.521875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 8.203125 72.90625 \n",
       "L 55.078125 72.90625 \n",
       "L 55.078125 68.703125 \n",
       "L 28.609375 0 \n",
       "L 18.3125 0 \n",
       "L 43.21875 64.59375 \n",
       "L 8.203125 64.59375 \n",
       "z\n",
       "\" id=\"DejaVuSans-55\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-55\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_8\">\n",
       "     <g id=\"line2d_15\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 485.803125 418.699219 \n",
       "L 485.803125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_16\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"485.803125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_8\">\n",
       "      <!-- 8 -->\n",
       "      <g transform=\"translate(482.621875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 31.78125 34.625 \n",
       "Q 24.75 34.625 20.71875 30.859375 \n",
       "Q 16.703125 27.09375 16.703125 20.515625 \n",
       "Q 16.703125 13.921875 20.71875 10.15625 \n",
       "Q 24.75 6.390625 31.78125 6.390625 \n",
       "Q 38.8125 6.390625 42.859375 10.171875 \n",
       "Q 46.921875 13.96875 46.921875 20.515625 \n",
       "Q 46.921875 27.09375 42.890625 30.859375 \n",
       "Q 38.875 34.625 31.78125 34.625 \n",
       "z\n",
       "M 21.921875 38.8125 \n",
       "Q 15.578125 40.375 12.03125 44.71875 \n",
       "Q 8.5 49.078125 8.5 55.328125 \n",
       "Q 8.5 64.0625 14.71875 69.140625 \n",
       "Q 20.953125 74.21875 31.78125 74.21875 \n",
       "Q 42.671875 74.21875 48.875 69.140625 \n",
       "Q 55.078125 64.0625 55.078125 55.328125 \n",
       "Q 55.078125 49.078125 51.53125 44.71875 \n",
       "Q 48 40.375 41.703125 38.8125 \n",
       "Q 48.828125 37.15625 52.796875 32.3125 \n",
       "Q 56.78125 27.484375 56.78125 20.515625 \n",
       "Q 56.78125 9.90625 50.3125 4.234375 \n",
       "Q 43.84375 -1.421875 31.78125 -1.421875 \n",
       "Q 19.734375 -1.421875 13.25 4.234375 \n",
       "Q 6.78125 9.90625 6.78125 20.515625 \n",
       "Q 6.78125 27.484375 10.78125 32.3125 \n",
       "Q 14.796875 37.15625 21.921875 38.8125 \n",
       "z\n",
       "M 18.3125 54.390625 \n",
       "Q 18.3125 48.734375 21.84375 45.5625 \n",
       "Q 25.390625 42.390625 31.78125 42.390625 \n",
       "Q 38.140625 42.390625 41.71875 45.5625 \n",
       "Q 45.3125 48.734375 45.3125 54.390625 \n",
       "Q 45.3125 60.0625 41.71875 63.234375 \n",
       "Q 38.140625 66.40625 31.78125 66.40625 \n",
       "Q 25.390625 66.40625 21.84375 63.234375 \n",
       "Q 18.3125 60.0625 18.3125 54.390625 \n",
       "z\n",
       "\" id=\"DejaVuSans-56\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-56\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_9\">\n",
       "     <g id=\"line2d_17\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 550.903125 418.699219 \n",
       "L 550.903125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_18\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"550.903125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_9\">\n",
       "      <!-- 9 -->\n",
       "      <g transform=\"translate(547.721875 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 10.984375 1.515625 \n",
       "L 10.984375 10.5 \n",
       "Q 14.703125 8.734375 18.5 7.8125 \n",
       "Q 22.3125 6.890625 25.984375 6.890625 \n",
       "Q 35.75 6.890625 40.890625 13.453125 \n",
       "Q 46.046875 20.015625 46.78125 33.40625 \n",
       "Q 43.953125 29.203125 39.59375 26.953125 \n",
       "Q 35.25 24.703125 29.984375 24.703125 \n",
       "Q 19.046875 24.703125 12.671875 31.3125 \n",
       "Q 6.296875 37.9375 6.296875 49.421875 \n",
       "Q 6.296875 60.640625 12.9375 67.421875 \n",
       "Q 19.578125 74.21875 30.609375 74.21875 \n",
       "Q 43.265625 74.21875 49.921875 64.515625 \n",
       "Q 56.59375 54.828125 56.59375 36.375 \n",
       "Q 56.59375 19.140625 48.40625 8.859375 \n",
       "Q 40.234375 -1.421875 26.421875 -1.421875 \n",
       "Q 22.703125 -1.421875 18.890625 -0.6875 \n",
       "Q 15.09375 0.046875 10.984375 1.515625 \n",
       "z\n",
       "M 30.609375 32.421875 \n",
       "Q 37.25 32.421875 41.125 36.953125 \n",
       "Q 45.015625 41.5 45.015625 49.421875 \n",
       "Q 45.015625 57.28125 41.125 61.84375 \n",
       "Q 37.25 66.40625 30.609375 66.40625 \n",
       "Q 23.96875 66.40625 20.09375 61.84375 \n",
       "Q 16.21875 57.28125 16.21875 49.421875 \n",
       "Q 16.21875 41.5 20.09375 36.953125 \n",
       "Q 23.96875 32.421875 30.609375 32.421875 \n",
       "z\n",
       "\" id=\"DejaVuSans-57\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-57\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"xtick_10\">\n",
       "     <g id=\"line2d_19\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 616.003125 418.699219 \n",
       "L 616.003125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_20\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"616.003125\" xlink:href=\"#md30d7d8941\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_10\">\n",
       "      <!-- 10 -->\n",
       "      <g transform=\"translate(609.640625 433.297656)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 31.78125 66.40625 \n",
       "Q 24.171875 66.40625 20.328125 58.90625 \n",
       "Q 16.5 51.421875 16.5 36.375 \n",
       "Q 16.5 21.390625 20.328125 13.890625 \n",
       "Q 24.171875 6.390625 31.78125 6.390625 \n",
       "Q 39.453125 6.390625 43.28125 13.890625 \n",
       "Q 47.125 21.390625 47.125 36.375 \n",
       "Q 47.125 51.421875 43.28125 58.90625 \n",
       "Q 39.453125 66.40625 31.78125 66.40625 \n",
       "z\n",
       "M 31.78125 74.21875 \n",
       "Q 44.046875 74.21875 50.515625 64.515625 \n",
       "Q 56.984375 54.828125 56.984375 36.375 \n",
       "Q 56.984375 17.96875 50.515625 8.265625 \n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \n",
       "Q 6.59375 17.96875 6.59375 36.375 \n",
       "Q 6.59375 54.828125 13.0625 64.515625 \n",
       "Q 19.53125 74.21875 31.78125 74.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-48\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"text_11\">\n",
       "     <!-- epoch -->\n",
       "     <g transform=\"translate(307.825 446.975781)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-101\"/>\n",
       "       <path d=\"M 18.109375 8.203125 \n",
       "L 18.109375 -20.796875 \n",
       "L 9.078125 -20.796875 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "z\n",
       "M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-112\"/>\n",
       "       <path d=\"M 30.609375 48.390625 \n",
       "Q 23.390625 48.390625 19.1875 42.75 \n",
       "Q 14.984375 37.109375 14.984375 27.296875 \n",
       "Q 14.984375 17.484375 19.15625 11.84375 \n",
       "Q 23.34375 6.203125 30.609375 6.203125 \n",
       "Q 37.796875 6.203125 41.984375 11.859375 \n",
       "Q 46.1875 17.53125 46.1875 27.296875 \n",
       "Q 46.1875 37.015625 41.984375 42.703125 \n",
       "Q 37.796875 48.390625 30.609375 48.390625 \n",
       "z\n",
       "M 30.609375 56 \n",
       "Q 42.328125 56 49.015625 48.375 \n",
       "Q 55.71875 40.765625 55.71875 27.296875 \n",
       "Q 55.71875 13.875 49.015625 6.21875 \n",
       "Q 42.328125 -1.421875 30.609375 -1.421875 \n",
       "Q 18.84375 -1.421875 12.171875 6.21875 \n",
       "Q 5.515625 13.875 5.515625 27.296875 \n",
       "Q 5.515625 40.765625 12.171875 48.375 \n",
       "Q 18.84375 56 30.609375 56 \n",
       "z\n",
       "\" id=\"DejaVuSans-111\"/>\n",
       "       <path d=\"M 48.78125 52.59375 \n",
       "L 48.78125 44.1875 \n",
       "Q 44.96875 46.296875 41.140625 47.34375 \n",
       "Q 37.3125 48.390625 33.40625 48.390625 \n",
       "Q 24.65625 48.390625 19.8125 42.84375 \n",
       "Q 14.984375 37.3125 14.984375 27.296875 \n",
       "Q 14.984375 17.28125 19.8125 11.734375 \n",
       "Q 24.65625 6.203125 33.40625 6.203125 \n",
       "Q 37.3125 6.203125 41.140625 7.25 \n",
       "Q 44.96875 8.296875 48.78125 10.40625 \n",
       "L 48.78125 2.09375 \n",
       "Q 45.015625 0.34375 40.984375 -0.53125 \n",
       "Q 36.96875 -1.421875 32.421875 -1.421875 \n",
       "Q 20.0625 -1.421875 12.78125 6.34375 \n",
       "Q 5.515625 14.109375 5.515625 27.296875 \n",
       "Q 5.515625 40.671875 12.859375 48.328125 \n",
       "Q 20.21875 56 33.015625 56 \n",
       "Q 37.15625 56 41.109375 55.140625 \n",
       "Q 45.0625 54.296875 48.78125 52.59375 \n",
       "z\n",
       "\" id=\"DejaVuSans-99\"/>\n",
       "       <path d=\"M 54.890625 33.015625 \n",
       "L 54.890625 0 \n",
       "L 45.90625 0 \n",
       "L 45.90625 32.71875 \n",
       "Q 45.90625 40.484375 42.875 44.328125 \n",
       "Q 39.84375 48.1875 33.796875 48.1875 \n",
       "Q 26.515625 48.1875 22.3125 43.546875 \n",
       "Q 18.109375 38.921875 18.109375 30.90625 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "L 18.109375 46.1875 \n",
       "Q 21.34375 51.125 25.703125 53.5625 \n",
       "Q 30.078125 56 35.796875 56 \n",
       "Q 45.21875 56 50.046875 50.171875 \n",
       "Q 54.890625 44.34375 54.890625 33.015625 \n",
       "z\n",
       "\" id=\"DejaVuSans-104\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-101\"/>\n",
       "      <use x=\"61.523438\" xlink:href=\"#DejaVuSans-112\"/>\n",
       "      <use x=\"125\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "      <use x=\"186.181641\" xlink:href=\"#DejaVuSans-99\"/>\n",
       "      <use x=\"241.162109\" xlink:href=\"#DejaVuSans-104\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"matplotlib.axis_2\">\n",
       "    <g id=\"ytick_1\">\n",
       "     <g id=\"line2d_21\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 418.699219 \n",
       "L 616.003125 418.699219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_22\">\n",
       "      <defs>\n",
       "       <path d=\"M 0 0 \n",
       "L -3.5 0 \n",
       "\" id=\"m21a80445f6\" style=\"stroke:#000000;stroke-width:0.8;\"/>\n",
       "      </defs>\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"418.699219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_12\">\n",
       "      <!-- 0.3 -->\n",
       "      <g transform=\"translate(7.2 422.498437)scale(0.1 -0.1)\">\n",
       "       <defs>\n",
       "        <path d=\"M 10.6875 12.40625 \n",
       "L 21 12.40625 \n",
       "L 21 0 \n",
       "L 10.6875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-46\"/>\n",
       "       </defs>\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-51\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_2\">\n",
       "     <g id=\"line2d_23\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 350.749219 \n",
       "L 616.003125 350.749219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_24\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"350.749219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_13\">\n",
       "      <!-- 0.4 -->\n",
       "      <g transform=\"translate(7.2 354.548437)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-52\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_3\">\n",
       "     <g id=\"line2d_25\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 282.799219 \n",
       "L 616.003125 282.799219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_26\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"282.799219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_14\">\n",
       "      <!-- 0.5 -->\n",
       "      <g transform=\"translate(7.2 286.598437)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_4\">\n",
       "     <g id=\"line2d_27\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 214.849219 \n",
       "L 616.003125 214.849219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_28\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"214.849219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_15\">\n",
       "      <!-- 0.6 -->\n",
       "      <g transform=\"translate(7.2 218.648437)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-54\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_5\">\n",
       "     <g id=\"line2d_29\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 146.899219 \n",
       "L 616.003125 146.899219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_30\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"146.899219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_16\">\n",
       "      <!-- 0.7 -->\n",
       "      <g transform=\"translate(7.2 150.698438)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-55\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_6\">\n",
       "     <g id=\"line2d_31\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 78.949219 \n",
       "L 616.003125 78.949219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_32\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"78.949219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_17\">\n",
       "      <!-- 0.8 -->\n",
       "      <g transform=\"translate(7.2 82.748438)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-56\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"ytick_7\">\n",
       "     <g id=\"line2d_33\">\n",
       "      <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 10.999219 \n",
       "L 616.003125 10.999219 \n",
       "\" style=\"fill:none;stroke:#b0b0b0;stroke-linecap:square;stroke-width:0.8;\"/>\n",
       "     </g>\n",
       "     <g id=\"line2d_34\">\n",
       "      <g>\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m21a80445f6\" y=\"10.999219\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "     <g id=\"text_18\">\n",
       "      <!-- 0.9 -->\n",
       "      <g transform=\"translate(7.2 14.798437)scale(0.1 -0.1)\">\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-57\"/>\n",
       "      </g>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"line2d_35\">\n",
       "    <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 89.151535 \n",
       "L 95.203125 235.946923 \n",
       "L 160.303125 265.60692 \n",
       "L 225.403125 282.434166 \n",
       "L 290.503125 292.801526 \n",
       "L 355.603125 300.538707 \n",
       "L 420.703125 306.158159 \n",
       "L 485.803125 311.156234 \n",
       "L 550.903125 315.241006 \n",
       "L 616.003125 318.718554 \n",
       "\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_36\">\n",
       "    <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 111.995569 \n",
       "L 95.203125 69.334294 \n",
       "L 160.303125 61.270894 \n",
       "L 225.403125 56.559694 \n",
       "L 290.503125 53.886994 \n",
       "L 355.603125 51.984394 \n",
       "L 420.703125 49.776019 \n",
       "L 485.803125 48.077269 \n",
       "L 550.903125 47.522344 \n",
       "L 616.003125 46.537069 \n",
       "\" style=\"fill:none;stroke:#bf00bf;stroke-dasharray:5.55,2.4;stroke-dashoffset:0;stroke-width:1.5;\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_37\">\n",
       "    <path clip-path=\"url(#p301cedddc9)\" d=\"M 30.103125 83.637769 \n",
       "L 95.203125 71.406769 \n",
       "L 160.303125 64.883569 \n",
       "L 225.403125 63.524569 \n",
       "L 290.503125 64.000219 \n",
       "L 355.603125 64.136119 \n",
       "L 420.703125 64.883569 \n",
       "L 485.803125 59.243719 \n",
       "L 550.903125 61.282219 \n",
       "L 616.003125 57.816769 \n",
       "\" style=\"fill:none;stroke:#008000;stroke-dasharray:9.6,2.4,1.5,2.4;stroke-dashoffset:0;stroke-width:1.5;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 30.103125 418.699219 \n",
       "L 30.103125 10.999219 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 616.003125 418.699219 \n",
       "L 616.003125 10.999219 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 30.103125 418.699219 \n",
       "L 616.003125 418.699219 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 30.103125 10.999219 \n",
       "L 616.003125 10.999219 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"legend_1\">\n",
       "    <g id=\"patch_7\">\n",
       "     <path d=\"M 37.103125 63.033594 \n",
       "L 114.871875 63.033594 \n",
       "Q 116.871875 63.033594 116.871875 61.033594 \n",
       "L 116.871875 17.999219 \n",
       "Q 116.871875 15.999219 114.871875 15.999219 \n",
       "L 37.103125 15.999219 \n",
       "Q 35.103125 15.999219 35.103125 17.999219 \n",
       "L 35.103125 61.033594 \n",
       "Q 35.103125 63.033594 37.103125 63.033594 \n",
       "z\n",
       "\" style=\"fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_38\">\n",
       "     <path d=\"M 39.103125 24.097656 \n",
       "L 59.103125 24.097656 \n",
       "\" style=\"fill:none;stroke:#1f77b4;stroke-linecap:square;stroke-width:1.5;\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_39\"/>\n",
       "    <g id=\"text_19\">\n",
       "     <!-- train loss -->\n",
       "     <g transform=\"translate(67.103125 27.597656)scale(0.1 -0.1)\">\n",
       "      <defs>\n",
       "       <path d=\"M 18.3125 70.21875 \n",
       "L 18.3125 54.6875 \n",
       "L 36.8125 54.6875 \n",
       "L 36.8125 47.703125 \n",
       "L 18.3125 47.703125 \n",
       "L 18.3125 18.015625 \n",
       "Q 18.3125 11.328125 20.140625 9.421875 \n",
       "Q 21.96875 7.515625 27.59375 7.515625 \n",
       "L 36.8125 7.515625 \n",
       "L 36.8125 0 \n",
       "L 27.59375 0 \n",
       "Q 17.1875 0 13.234375 3.875 \n",
       "Q 9.28125 7.765625 9.28125 18.015625 \n",
       "L 9.28125 47.703125 \n",
       "L 2.6875 47.703125 \n",
       "L 2.6875 54.6875 \n",
       "L 9.28125 54.6875 \n",
       "L 9.28125 70.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-116\"/>\n",
       "       <path d=\"M 41.109375 46.296875 \n",
       "Q 39.59375 47.171875 37.8125 47.578125 \n",
       "Q 36.03125 48 33.890625 48 \n",
       "Q 26.265625 48 22.1875 43.046875 \n",
       "Q 18.109375 38.09375 18.109375 28.8125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.1875 \n",
       "Q 20.953125 51.171875 25.484375 53.578125 \n",
       "Q 30.03125 56 36.53125 56 \n",
       "Q 37.453125 56 38.578125 55.875 \n",
       "Q 39.703125 55.765625 41.0625 55.515625 \n",
       "z\n",
       "\" id=\"DejaVuSans-114\"/>\n",
       "       <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-97\"/>\n",
       "       <path d=\"M 9.421875 54.6875 \n",
       "L 18.40625 54.6875 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 64.59375 \n",
       "L 9.421875 64.59375 \n",
       "z\n",
       "\" id=\"DejaVuSans-105\"/>\n",
       "       <path d=\"M 54.890625 33.015625 \n",
       "L 54.890625 0 \n",
       "L 45.90625 0 \n",
       "L 45.90625 32.71875 \n",
       "Q 45.90625 40.484375 42.875 44.328125 \n",
       "Q 39.84375 48.1875 33.796875 48.1875 \n",
       "Q 26.515625 48.1875 22.3125 43.546875 \n",
       "Q 18.109375 38.921875 18.109375 30.90625 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.1875 \n",
       "Q 21.34375 51.125 25.703125 53.5625 \n",
       "Q 30.078125 56 35.796875 56 \n",
       "Q 45.21875 56 50.046875 50.171875 \n",
       "Q 54.890625 44.34375 54.890625 33.015625 \n",
       "z\n",
       "\" id=\"DejaVuSans-110\"/>\n",
       "       <path id=\"DejaVuSans-32\"/>\n",
       "       <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-108\"/>\n",
       "       <path d=\"M 44.28125 53.078125 \n",
       "L 44.28125 44.578125 \n",
       "Q 40.484375 46.53125 36.375 47.5 \n",
       "Q 32.28125 48.484375 27.875 48.484375 \n",
       "Q 21.1875 48.484375 17.84375 46.4375 \n",
       "Q 14.5 44.390625 14.5 40.28125 \n",
       "Q 14.5 37.15625 16.890625 35.375 \n",
       "Q 19.28125 33.59375 26.515625 31.984375 \n",
       "L 29.59375 31.296875 \n",
       "Q 39.15625 29.25 43.1875 25.515625 \n",
       "Q 47.21875 21.78125 47.21875 15.09375 \n",
       "Q 47.21875 7.46875 41.1875 3.015625 \n",
       "Q 35.15625 -1.421875 24.609375 -1.421875 \n",
       "Q 20.21875 -1.421875 15.453125 -0.5625 \n",
       "Q 10.6875 0.296875 5.421875 2 \n",
       "L 5.421875 11.28125 \n",
       "Q 10.40625 8.6875 15.234375 7.390625 \n",
       "Q 20.0625 6.109375 24.8125 6.109375 \n",
       "Q 31.15625 6.109375 34.5625 8.28125 \n",
       "Q 37.984375 10.453125 37.984375 14.40625 \n",
       "Q 37.984375 18.0625 35.515625 20.015625 \n",
       "Q 33.0625 21.96875 24.703125 23.78125 \n",
       "L 21.578125 24.515625 \n",
       "Q 13.234375 26.265625 9.515625 29.90625 \n",
       "Q 5.8125 33.546875 5.8125 39.890625 \n",
       "Q 5.8125 47.609375 11.28125 51.796875 \n",
       "Q 16.75 56 26.8125 56 \n",
       "Q 31.78125 56 36.171875 55.265625 \n",
       "Q 40.578125 54.546875 44.28125 53.078125 \n",
       "z\n",
       "\" id=\"DejaVuSans-115\"/>\n",
       "      </defs>\n",
       "      <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "      <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "      <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
       "      <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
       "      <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
       "      <use x=\"232.763672\" xlink:href=\"#DejaVuSans-32\"/>\n",
       "      <use x=\"264.550781\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "      <use x=\"292.333984\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "      <use x=\"353.515625\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "      <use x=\"405.615234\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_40\">\n",
       "     <path d=\"M 39.103125 38.775781 \n",
       "L 59.103125 38.775781 \n",
       "\" style=\"fill:none;stroke:#bf00bf;stroke-dasharray:5.55,2.4;stroke-dashoffset:0;stroke-width:1.5;\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_41\"/>\n",
       "    <g id=\"text_20\">\n",
       "     <!-- train acc -->\n",
       "     <g transform=\"translate(67.103125 42.275781)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "      <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "      <use x=\"80.322266\" xlink:href=\"#DejaVuSans-97\"/>\n",
       "      <use x=\"141.601562\" xlink:href=\"#DejaVuSans-105\"/>\n",
       "      <use x=\"169.384766\" xlink:href=\"#DejaVuSans-110\"/>\n",
       "      <use x=\"232.763672\" xlink:href=\"#DejaVuSans-32\"/>\n",
       "      <use x=\"264.550781\" xlink:href=\"#DejaVuSans-97\"/>\n",
       "      <use x=\"325.830078\" xlink:href=\"#DejaVuSans-99\"/>\n",
       "      <use x=\"380.810547\" xlink:href=\"#DejaVuSans-99\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "    <g id=\"line2d_42\">\n",
       "     <path d=\"M 39.103125 53.453906 \n",
       "L 59.103125 53.453906 \n",
       "\" style=\"fill:none;stroke:#008000;stroke-dasharray:9.6,2.4,1.5,2.4;stroke-dashoffset:0;stroke-width:1.5;\"/>\n",
       "    </g>\n",
       "    <g id=\"line2d_43\"/>\n",
       "    <g id=\"text_21\">\n",
       "     <!-- test acc -->\n",
       "     <g transform=\"translate(67.103125 56.953906)scale(0.1 -0.1)\">\n",
       "      <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "      <use x=\"39.208984\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "      <use x=\"100.732422\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "      <use x=\"152.832031\" xlink:href=\"#DejaVuSans-116\"/>\n",
       "      <use x=\"192.041016\" xlink:href=\"#DejaVuSans-32\"/>\n",
       "      <use x=\"223.828125\" xlink:href=\"#DejaVuSans-97\"/>\n",
       "      <use x=\"285.107422\" xlink:href=\"#DejaVuSans-99\"/>\n",
       "      <use x=\"340.087891\" xlink:href=\"#DejaVuSans-99\"/>\n",
       "     </g>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p301cedddc9\">\n",
       "   <rect height=\"407.7\" width=\"585.9\" x=\"30.103125\" y=\"10.999219\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 756x540 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_epochs = 10\n",
    "train_ch3(net, train_iter, test_iter, cross_entropy, num_epochs, updater)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 对图像进行分类预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "execution": {
     "iopub.execute_input": "2022-07-31T02:44:21.180478Z",
     "iopub.status.busy": "2022-07-31T02:44:21.179944Z",
     "iopub.status.idle": "2022-07-31T02:44:21.724121Z",
     "shell.execute_reply": "2022-07-31T02:44:21.723084Z"
    },
    "origin_pos": 51,
    "slideshow": {
     "slide_type": "fragment"
    },
    "tab": [
     "pytorch"
    ]
   },
   "outputs": [],
   "source": [
    "def predict_ch3(net, test_iter, n=6):  \n",
    "    \"\"\"预测标签\n",
    "    n：显示图像的数量\n",
    "    \"\"\"\n",
    "    for X, y in test_iter:\n",
    "        break\n",
    "    trues = get_fashion_mnist_labels(y)   # 获得真实类别对应的类别名称\n",
    "    # net(X).argmax(axis=1) 获得数据的硬预测\n",
    "    preds = get_fashion_mnist_labels(net(X).argmax(axis=1))\n",
    "    titles = [true +'\\n' + pred for true, pred in zip(trues, preds)]   # 真实和预测值对应的类别名称构成的列表\n",
    "    _ = show_images(X[0:n].reshape((n, 28, 28)), 1, n, titles=titles[0:n])  # 1行n列，注意改变图像数据的形状，去除通道维度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Created with matplotlib (https://matplotlib.org/) -->\n",
       "<svg height=\"118.198357pt\" version=\"1.1\" viewBox=\"0 0 520.1 118.198357\" width=\"520.1pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2025-11-30T19:41:38.340562</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.3.4, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linecap:butt;stroke-linejoin:round;}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 118.198357 \n",
       "L 520.1 118.198357 \n",
       "L 520.1 0 \n",
       "L 0 0 \n",
       "z\n",
       "\" style=\"fill:none;\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 10.7 107.498357 \n",
       "L 82.442857 107.498357 \n",
       "L 82.442857 35.7555 \n",
       "L 10.7 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p3e15fff9c5)\">\n",
       "    <image height=\"72\" id=\"image1b60560ade\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"10.7\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 10.7 107.498357 \n",
       "L 10.7 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 82.442857 107.498357 \n",
       "L 82.442857 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 10.7 107.498357 \n",
       "L 82.442857 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_6\">\n",
       "    <path d=\"M 10.7 35.7555 \n",
       "L 82.442857 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- ankle boot -->\n",
       "    <g transform=\"translate(14.848304 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 34.28125 27.484375 \n",
       "Q 23.390625 27.484375 19.1875 25 \n",
       "Q 14.984375 22.515625 14.984375 16.5 \n",
       "Q 14.984375 11.71875 18.140625 8.90625 \n",
       "Q 21.296875 6.109375 26.703125 6.109375 \n",
       "Q 34.1875 6.109375 38.703125 11.40625 \n",
       "Q 43.21875 16.703125 43.21875 25.484375 \n",
       "L 43.21875 27.484375 \n",
       "z\n",
       "M 52.203125 31.203125 \n",
       "L 52.203125 0 \n",
       "L 43.21875 0 \n",
       "L 43.21875 8.296875 \n",
       "Q 40.140625 3.328125 35.546875 0.953125 \n",
       "Q 30.953125 -1.421875 24.3125 -1.421875 \n",
       "Q 15.921875 -1.421875 10.953125 3.296875 \n",
       "Q 6 8.015625 6 15.921875 \n",
       "Q 6 25.140625 12.171875 29.828125 \n",
       "Q 18.359375 34.515625 30.609375 34.515625 \n",
       "L 43.21875 34.515625 \n",
       "L 43.21875 35.40625 \n",
       "Q 43.21875 41.609375 39.140625 45 \n",
       "Q 35.0625 48.390625 27.6875 48.390625 \n",
       "Q 23 48.390625 18.546875 47.265625 \n",
       "Q 14.109375 46.140625 10.015625 43.890625 \n",
       "L 10.015625 52.203125 \n",
       "Q 14.9375 54.109375 19.578125 55.046875 \n",
       "Q 24.21875 56 28.609375 56 \n",
       "Q 40.484375 56 46.34375 49.84375 \n",
       "Q 52.203125 43.703125 52.203125 31.203125 \n",
       "z\n",
       "\" id=\"DejaVuSans-97\"/>\n",
       "      <path d=\"M 54.890625 33.015625 \n",
       "L 54.890625 0 \n",
       "L 45.90625 0 \n",
       "L 45.90625 32.71875 \n",
       "Q 45.90625 40.484375 42.875 44.328125 \n",
       "Q 39.84375 48.1875 33.796875 48.1875 \n",
       "Q 26.515625 48.1875 22.3125 43.546875 \n",
       "Q 18.109375 38.921875 18.109375 30.90625 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.1875 \n",
       "Q 21.34375 51.125 25.703125 53.5625 \n",
       "Q 30.078125 56 35.796875 56 \n",
       "Q 45.21875 56 50.046875 50.171875 \n",
       "Q 54.890625 44.34375 54.890625 33.015625 \n",
       "z\n",
       "\" id=\"DejaVuSans-110\"/>\n",
       "      <path d=\"M 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "L 18.109375 31.109375 \n",
       "L 44.921875 54.6875 \n",
       "L 56.390625 54.6875 \n",
       "L 27.390625 29.109375 \n",
       "L 57.625 0 \n",
       "L 45.90625 0 \n",
       "L 18.109375 26.703125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-107\"/>\n",
       "      <path d=\"M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-108\"/>\n",
       "      <path d=\"M 56.203125 29.59375 \n",
       "L 56.203125 25.203125 \n",
       "L 14.890625 25.203125 \n",
       "Q 15.484375 15.921875 20.484375 11.0625 \n",
       "Q 25.484375 6.203125 34.421875 6.203125 \n",
       "Q 39.59375 6.203125 44.453125 7.46875 \n",
       "Q 49.3125 8.734375 54.109375 11.28125 \n",
       "L 54.109375 2.78125 \n",
       "Q 49.265625 0.734375 44.1875 -0.34375 \n",
       "Q 39.109375 -1.421875 33.890625 -1.421875 \n",
       "Q 20.796875 -1.421875 13.15625 6.1875 \n",
       "Q 5.515625 13.8125 5.515625 26.8125 \n",
       "Q 5.515625 40.234375 12.765625 48.109375 \n",
       "Q 20.015625 56 32.328125 56 \n",
       "Q 43.359375 56 49.78125 48.890625 \n",
       "Q 56.203125 41.796875 56.203125 29.59375 \n",
       "z\n",
       "M 47.21875 32.234375 \n",
       "Q 47.125 39.59375 43.09375 43.984375 \n",
       "Q 39.0625 48.390625 32.421875 48.390625 \n",
       "Q 24.90625 48.390625 20.390625 44.140625 \n",
       "Q 15.875 39.890625 15.1875 32.171875 \n",
       "z\n",
       "\" id=\"DejaVuSans-101\"/>\n",
       "      <path id=\"DejaVuSans-32\"/>\n",
       "      <path d=\"M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "M 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "z\n",
       "\" id=\"DejaVuSans-98\"/>\n",
       "      <path d=\"M 30.609375 48.390625 \n",
       "Q 23.390625 48.390625 19.1875 42.75 \n",
       "Q 14.984375 37.109375 14.984375 27.296875 \n",
       "Q 14.984375 17.484375 19.15625 11.84375 \n",
       "Q 23.34375 6.203125 30.609375 6.203125 \n",
       "Q 37.796875 6.203125 41.984375 11.859375 \n",
       "Q 46.1875 17.53125 46.1875 27.296875 \n",
       "Q 46.1875 37.015625 41.984375 42.703125 \n",
       "Q 37.796875 48.390625 30.609375 48.390625 \n",
       "z\n",
       "M 30.609375 56 \n",
       "Q 42.328125 56 49.015625 48.375 \n",
       "Q 55.71875 40.765625 55.71875 27.296875 \n",
       "Q 55.71875 13.875 49.015625 6.21875 \n",
       "Q 42.328125 -1.421875 30.609375 -1.421875 \n",
       "Q 18.84375 -1.421875 12.171875 6.21875 \n",
       "Q 5.515625 13.875 5.515625 27.296875 \n",
       "Q 5.515625 40.765625 12.171875 48.375 \n",
       "Q 18.84375 56 30.609375 56 \n",
       "z\n",
       "\" id=\"DejaVuSans-111\"/>\n",
       "      <path d=\"M 18.3125 70.21875 \n",
       "L 18.3125 54.6875 \n",
       "L 36.8125 54.6875 \n",
       "L 36.8125 47.703125 \n",
       "L 18.3125 47.703125 \n",
       "L 18.3125 18.015625 \n",
       "Q 18.3125 11.328125 20.140625 9.421875 \n",
       "Q 21.96875 7.515625 27.59375 7.515625 \n",
       "L 36.8125 7.515625 \n",
       "L 36.8125 0 \n",
       "L 27.59375 0 \n",
       "Q 17.1875 0 13.234375 3.875 \n",
       "Q 9.28125 7.765625 9.28125 18.015625 \n",
       "L 9.28125 47.703125 \n",
       "L 2.6875 47.703125 \n",
       "L 2.6875 54.6875 \n",
       "L 9.28125 54.6875 \n",
       "L 9.28125 70.21875 \n",
       "z\n",
       "\" id=\"DejaVuSans-116\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-97\"/>\n",
       "     <use x=\"61.279297\" xlink:href=\"#DejaVuSans-110\"/>\n",
       "     <use x=\"124.658203\" xlink:href=\"#DejaVuSans-107\"/>\n",
       "     <use x=\"182.568359\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"210.351562\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"271.875\" xlink:href=\"#DejaVuSans-32\"/>\n",
       "     <use x=\"303.662109\" xlink:href=\"#DejaVuSans-98\"/>\n",
       "     <use x=\"367.138672\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"428.320312\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"489.501953\" xlink:href=\"#DejaVuSans-116\"/>\n",
       "    </g>\n",
       "    <!-- ankle boot -->\n",
       "    <g transform=\"translate(14.848304 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-97\"/>\n",
       "     <use x=\"61.279297\" xlink:href=\"#DejaVuSans-110\"/>\n",
       "     <use x=\"124.658203\" xlink:href=\"#DejaVuSans-107\"/>\n",
       "     <use x=\"182.568359\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"210.351562\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"271.875\" xlink:href=\"#DejaVuSans-32\"/>\n",
       "     <use x=\"303.662109\" xlink:href=\"#DejaVuSans-98\"/>\n",
       "     <use x=\"367.138672\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"428.320312\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"489.501953\" xlink:href=\"#DejaVuSans-116\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_2\">\n",
       "   <g id=\"patch_7\">\n",
       "    <path d=\"M 96.791429 107.498357 \n",
       "L 168.534286 107.498357 \n",
       "L 168.534286 35.7555 \n",
       "L 96.791429 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p434a2d11dc)\">\n",
       "    <image height=\"72\" id=\"image215a6e59ab\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"96.791429\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_8\">\n",
       "    <path d=\"M 96.791429 107.498357 \n",
       "L 96.791429 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_9\">\n",
       "    <path d=\"M 168.534286 107.498357 \n",
       "L 168.534286 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_10\">\n",
       "    <path d=\"M 96.791429 107.498357 \n",
       "L 168.534286 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_11\">\n",
       "    <path d=\"M 96.791429 35.7555 \n",
       "L 168.534286 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- pullover -->\n",
       "    <g transform=\"translate(108.336607 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 18.109375 8.203125 \n",
       "L 18.109375 -20.796875 \n",
       "L 9.078125 -20.796875 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.390625 \n",
       "Q 20.953125 51.265625 25.265625 53.625 \n",
       "Q 29.59375 56 35.59375 56 \n",
       "Q 45.5625 56 51.78125 48.09375 \n",
       "Q 58.015625 40.1875 58.015625 27.296875 \n",
       "Q 58.015625 14.40625 51.78125 6.484375 \n",
       "Q 45.5625 -1.421875 35.59375 -1.421875 \n",
       "Q 29.59375 -1.421875 25.265625 0.953125 \n",
       "Q 20.953125 3.328125 18.109375 8.203125 \n",
       "z\n",
       "M 48.6875 27.296875 \n",
       "Q 48.6875 37.203125 44.609375 42.84375 \n",
       "Q 40.53125 48.484375 33.40625 48.484375 \n",
       "Q 26.265625 48.484375 22.1875 42.84375 \n",
       "Q 18.109375 37.203125 18.109375 27.296875 \n",
       "Q 18.109375 17.390625 22.1875 11.75 \n",
       "Q 26.265625 6.109375 33.40625 6.109375 \n",
       "Q 40.53125 6.109375 44.609375 11.75 \n",
       "Q 48.6875 17.390625 48.6875 27.296875 \n",
       "z\n",
       "\" id=\"DejaVuSans-112\"/>\n",
       "      <path d=\"M 8.5 21.578125 \n",
       "L 8.5 54.6875 \n",
       "L 17.484375 54.6875 \n",
       "L 17.484375 21.921875 \n",
       "Q 17.484375 14.15625 20.5 10.265625 \n",
       "Q 23.53125 6.390625 29.59375 6.390625 \n",
       "Q 36.859375 6.390625 41.078125 11.03125 \n",
       "Q 45.3125 15.671875 45.3125 23.6875 \n",
       "L 45.3125 54.6875 \n",
       "L 54.296875 54.6875 \n",
       "L 54.296875 0 \n",
       "L 45.3125 0 \n",
       "L 45.3125 8.40625 \n",
       "Q 42.046875 3.421875 37.71875 1 \n",
       "Q 33.40625 -1.421875 27.6875 -1.421875 \n",
       "Q 18.265625 -1.421875 13.375 4.4375 \n",
       "Q 8.5 10.296875 8.5 21.578125 \n",
       "z\n",
       "M 31.109375 56 \n",
       "z\n",
       "\" id=\"DejaVuSans-117\"/>\n",
       "      <path d=\"M 2.984375 54.6875 \n",
       "L 12.5 54.6875 \n",
       "L 29.59375 8.796875 \n",
       "L 46.6875 54.6875 \n",
       "L 56.203125 54.6875 \n",
       "L 35.6875 0 \n",
       "L 23.484375 0 \n",
       "z\n",
       "\" id=\"DejaVuSans-118\"/>\n",
       "      <path d=\"M 41.109375 46.296875 \n",
       "Q 39.59375 47.171875 37.8125 47.578125 \n",
       "Q 36.03125 48 33.890625 48 \n",
       "Q 26.265625 48 22.1875 43.046875 \n",
       "Q 18.109375 38.09375 18.109375 28.8125 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 54.6875 \n",
       "L 18.109375 54.6875 \n",
       "L 18.109375 46.1875 \n",
       "Q 20.953125 51.171875 25.484375 53.578125 \n",
       "Q 30.03125 56 36.53125 56 \n",
       "Q 37.453125 56 38.578125 55.875 \n",
       "Q 39.703125 55.765625 41.0625 55.515625 \n",
       "z\n",
       "\" id=\"DejaVuSans-114\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-112\"/>\n",
       "     <use x=\"63.476562\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"126.855469\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"154.638672\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"182.421875\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"243.603516\" xlink:href=\"#DejaVuSans-118\"/>\n",
       "     <use x=\"302.783203\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"364.306641\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "    <!-- pullover -->\n",
       "    <g transform=\"translate(108.336607 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-112\"/>\n",
       "     <use x=\"63.476562\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"126.855469\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"154.638672\" xlink:href=\"#DejaVuSans-108\"/>\n",
       "     <use x=\"182.421875\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"243.603516\" xlink:href=\"#DejaVuSans-118\"/>\n",
       "     <use x=\"302.783203\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"364.306641\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_3\">\n",
       "   <g id=\"patch_12\">\n",
       "    <path d=\"M 182.882857 107.498357 \n",
       "L 254.625714 107.498357 \n",
       "L 254.625714 35.7555 \n",
       "L 182.882857 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pdbf16337d7)\">\n",
       "    <image height=\"72\" id=\"imagef093ad96ad\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"182.882857\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_13\">\n",
       "    <path d=\"M 182.882857 107.498357 \n",
       "L 182.882857 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_14\">\n",
       "    <path d=\"M 254.625714 107.498357 \n",
       "L 254.625714 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_15\">\n",
       "    <path d=\"M 182.882857 107.498357 \n",
       "L 254.625714 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_16\">\n",
       "    <path d=\"M 182.882857 35.7555 \n",
       "L 254.625714 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(197.312723 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 44.28125 53.078125 \n",
       "L 44.28125 44.578125 \n",
       "Q 40.484375 46.53125 36.375 47.5 \n",
       "Q 32.28125 48.484375 27.875 48.484375 \n",
       "Q 21.1875 48.484375 17.84375 46.4375 \n",
       "Q 14.5 44.390625 14.5 40.28125 \n",
       "Q 14.5 37.15625 16.890625 35.375 \n",
       "Q 19.28125 33.59375 26.515625 31.984375 \n",
       "L 29.59375 31.296875 \n",
       "Q 39.15625 29.25 43.1875 25.515625 \n",
       "Q 47.21875 21.78125 47.21875 15.09375 \n",
       "Q 47.21875 7.46875 41.1875 3.015625 \n",
       "Q 35.15625 -1.421875 24.609375 -1.421875 \n",
       "Q 20.21875 -1.421875 15.453125 -0.5625 \n",
       "Q 10.6875 0.296875 5.421875 2 \n",
       "L 5.421875 11.28125 \n",
       "Q 10.40625 8.6875 15.234375 7.390625 \n",
       "Q 20.0625 6.109375 24.8125 6.109375 \n",
       "Q 31.15625 6.109375 34.5625 8.28125 \n",
       "Q 37.984375 10.453125 37.984375 14.40625 \n",
       "Q 37.984375 18.0625 35.515625 20.015625 \n",
       "Q 33.0625 21.96875 24.703125 23.78125 \n",
       "L 21.578125 24.515625 \n",
       "Q 13.234375 26.265625 9.515625 29.90625 \n",
       "Q 5.8125 33.546875 5.8125 39.890625 \n",
       "Q 5.8125 47.609375 11.28125 51.796875 \n",
       "Q 16.75 56 26.8125 56 \n",
       "Q 31.78125 56 36.171875 55.265625 \n",
       "Q 40.578125 54.546875 44.28125 53.078125 \n",
       "z\n",
       "\" id=\"DejaVuSans-115\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(197.312723 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_4\">\n",
       "   <g id=\"patch_17\">\n",
       "    <path d=\"M 268.974286 107.498357 \n",
       "L 340.717143 107.498357 \n",
       "L 340.717143 35.7555 \n",
       "L 268.974286 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p3f8915fef4)\">\n",
       "    <image height=\"72\" id=\"image28e3b5ca1d\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"268.974286\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_18\">\n",
       "    <path d=\"M 268.974286 107.498357 \n",
       "L 268.974286 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_19\">\n",
       "    <path d=\"M 340.717143 107.498357 \n",
       "L 340.717143 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_20\">\n",
       "    <path d=\"M 268.974286 107.498357 \n",
       "L 340.717143 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_21\">\n",
       "    <path d=\"M 268.974286 35.7555 \n",
       "L 340.717143 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(283.404152 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(283.404152 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_5\">\n",
       "   <g id=\"patch_22\">\n",
       "    <path d=\"M 355.065714 107.498357 \n",
       "L 426.808571 107.498357 \n",
       "L 426.808571 35.7555 \n",
       "L 355.065714 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#p930f3762b3)\">\n",
       "    <image height=\"72\" id=\"imagef438c27c2f\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"355.065714\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_23\">\n",
       "    <path d=\"M 355.065714 107.498357 \n",
       "L 355.065714 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_24\">\n",
       "    <path d=\"M 426.808571 107.498357 \n",
       "L 426.808571 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_25\">\n",
       "    <path d=\"M 355.065714 107.498357 \n",
       "L 426.808571 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_26\">\n",
       "    <path d=\"M 355.065714 35.7555 \n",
       "L 426.808571 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- shirt -->\n",
       "    <g transform=\"translate(377.523393 16.318125)scale(0.12 -0.12)\">\n",
       "     <defs>\n",
       "      <path d=\"M 54.890625 33.015625 \n",
       "L 54.890625 0 \n",
       "L 45.90625 0 \n",
       "L 45.90625 32.71875 \n",
       "Q 45.90625 40.484375 42.875 44.328125 \n",
       "Q 39.84375 48.1875 33.796875 48.1875 \n",
       "Q 26.515625 48.1875 22.3125 43.546875 \n",
       "Q 18.109375 38.921875 18.109375 30.90625 \n",
       "L 18.109375 0 \n",
       "L 9.078125 0 \n",
       "L 9.078125 75.984375 \n",
       "L 18.109375 75.984375 \n",
       "L 18.109375 46.1875 \n",
       "Q 21.34375 51.125 25.703125 53.5625 \n",
       "Q 30.078125 56 35.796875 56 \n",
       "Q 45.21875 56 50.046875 50.171875 \n",
       "Q 54.890625 44.34375 54.890625 33.015625 \n",
       "z\n",
       "\" id=\"DejaVuSans-104\"/>\n",
       "      <path d=\"M 9.421875 54.6875 \n",
       "L 18.40625 54.6875 \n",
       "L 18.40625 0 \n",
       "L 9.421875 0 \n",
       "z\n",
       "M 9.421875 75.984375 \n",
       "L 18.40625 75.984375 \n",
       "L 18.40625 64.59375 \n",
       "L 9.421875 64.59375 \n",
       "z\n",
       "\" id=\"DejaVuSans-105\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"52.099609\" xlink:href=\"#DejaVuSans-104\"/>\n",
       "     <use x=\"115.478516\" xlink:href=\"#DejaVuSans-105\"/>\n",
       "     <use x=\"143.261719\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"184.375\" xlink:href=\"#DejaVuSans-116\"/>\n",
       "    </g>\n",
       "    <!-- shirt -->\n",
       "    <g transform=\"translate(377.523393 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"52.099609\" xlink:href=\"#DejaVuSans-104\"/>\n",
       "     <use x=\"115.478516\" xlink:href=\"#DejaVuSans-105\"/>\n",
       "     <use x=\"143.261719\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"184.375\" xlink:href=\"#DejaVuSans-116\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       "  <g id=\"axes_6\">\n",
       "   <g id=\"patch_27\">\n",
       "    <path d=\"M 441.157143 107.498357 \n",
       "L 512.9 107.498357 \n",
       "L 512.9 35.7555 \n",
       "L 441.157143 35.7555 \n",
       "z\n",
       "\" style=\"fill:#ffffff;\"/>\n",
       "   </g>\n",
       "   <g clip-path=\"url(#pba6ebccec6)\">\n",
       "    <image height=\"72\" id=\"image02507c647c\" transform=\"scale(1 -1)translate(0 -72)\" width=\"72\" x=\"441.157143\" xlink:href=\"data:image/png;base64,\n",
       "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\" y=\"-35.498357\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_28\">\n",
       "    <path d=\"M 441.157143 107.498357 \n",
       "L 441.157143 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_29\">\n",
       "    <path d=\"M 512.9 107.498357 \n",
       "L 512.9 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_30\">\n",
       "    <path d=\"M 441.157143 107.498357 \n",
       "L 512.9 107.498357 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_31\">\n",
       "    <path d=\"M 441.157143 35.7555 \n",
       "L 512.9 35.7555 \n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(455.587009 16.318125)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "    <!-- trouser -->\n",
       "    <g transform=\"translate(455.587009 29.7555)scale(0.12 -0.12)\">\n",
       "     <use xlink:href=\"#DejaVuSans-116\"/>\n",
       "     <use x=\"39.208984\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "     <use x=\"78.072266\" xlink:href=\"#DejaVuSans-111\"/>\n",
       "     <use x=\"139.253906\" xlink:href=\"#DejaVuSans-117\"/>\n",
       "     <use x=\"202.632812\" xlink:href=\"#DejaVuSans-115\"/>\n",
       "     <use x=\"254.732422\" xlink:href=\"#DejaVuSans-101\"/>\n",
       "     <use x=\"316.255859\" xlink:href=\"#DejaVuSans-114\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p3e15fff9c5\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"10.7\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p434a2d11dc\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"96.791429\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pdbf16337d7\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"182.882857\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p3f8915fef4\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"268.974286\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"p930f3762b3\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"355.065714\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       "  <clipPath id=\"pba6ebccec6\">\n",
       "   <rect height=\"71.742857\" width=\"71.742857\" x=\"441.157143\" y=\"35.7555\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<Figure size 648x108 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "predict_ch3(net, test_iter)"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "幻灯片",
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "latex_envs": {
   "LaTeX_envs_menu_present": true,
   "autoclose": true,
   "autocomplete": true,
   "bibliofile": "biblio.bib",
   "cite_by": "apalike",
   "current_citInitial": 1,
   "eqLabelWithNumbers": true,
   "eqNumInitial": 1,
   "hotkeys": {
    "equation": "Ctrl-E",
    "itemize": "Ctrl-I"
   },
   "labels_anchors": false,
   "latex_user_defs": false,
   "report_style_numbering": false,
   "user_envs_cfg": false
  },
  "rise": {
   "autolaunch": false,
   "enable_chalkboard": true,
   "scroll": true
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "288px"
   },
   "toc_section_display": true,
   "toc_window_display": false
  },
  "vscode": {
   "interpreter": {
    "hash": "34418ffb6f02e522390adb0e13441cc75f901cd11cccb4f6f613643b4b4d2a0b"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
